Java中位运算符~是按位取反,具体的运算过程是怎样的呢?
例如,int a=5;
~a=-6;为什么是-6呢?5的二进制表示为101,取反后为010?!!!!!!!!菜鸟求教,谢了。

解决方案 »

  1.   


    public class Test {
    public static void main(String[] args){
    int  a=5;
    String stra=Integer.toBinaryString(a);
    int b=~a;
    String strb=Integer.toBinaryString(b);
    //String strb="11111111111100010011111111111111";
    int c=Integer.parseInt(strb,2);//发现strb是32位就出错 学艺不精 同等高人来解
    System.out.println(stra);
    System.out.println(strb);
    System.out.println(c);
    }
    }
      

  2.   

    问题是计算机是按照补码的方式输出(打印):
    java 中int 是4个字节 
    5 : 00000000 00000000 00000000 00000101
    5取反: 11111111 11111111 11111111 11111010
    取反后再换成补码输出:
      (10000000 00000000 00000000 00000110)B = -6
      

  3.   

    Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。
    补码的规定如下: 
    对正数来说,最高位为0,其余各位代表数值本身(以二进制表示),如+42的补码为00101010。 
    对负数而言,把该数绝对值的补码按位取反,然后对整个数加1,即得该数的补码。如-42的补码为11010110(00101010按位取反11010101+1=11010110) 
    0的补码是唯一的,都为 00000000。现在分析你的
    5补码为00000101
    取反11111010,刚才说了,最高位表示符号,现在最高位是1,代表负数,负数怎么来的?绝对值取反,所以退回去就成了(也就是先求出绝对值就成了),
    11111010-1=11111001,再反回去,00000110,所以这个绝对值是6,那么因为它是负数,所以是-6,明白?