各位大佬好,小白想请教一下。char是2字节,16位,变量 x的值,在unicode表上十进制为97,二进制表示是否为00000000  01100001‬,  我想请问取反后不应该是11111111  10011110, 输出的结果为什么不是-158,而是98?

解决方案 »

  1.   

    得看你的数据类型了,比如说你写12,默认的就是int的12
    int是32位的
    12=00000000 00000000 00000000 00001100
    ~12=11111111 11111111 11111111 11110011
    第二个问题,有符号整数是按照最高位判断正负的(java中的数值除了char都是有符号的,都符合这个规则),如果x最高位是1,那么该数是负数,其值为 -((~x)+1),因此
    11111111 11111111 11111111 11111111作为int型的话,因为最高位为1,所以其值为 -(0+1)=-1
    根据上面的理论,~12=-(~(~12)+1)=-13