Java按位运算符^ - 位如何随机播放

boz*_*ser 0 java int bit-manipulation

这是一个小例子.

    int a = 11; //1 0 1 1 is bit representation
    System.out.println(~a);

    Output: -12
Run Code Online (Sandbox Code Playgroud)

据我所知,'〜'运算符反转位 - 即1 0 1 1现在应该是0 1 0 0因此输出应该是4.我缺少什么?

Roh*_*ain 5

11未表示为1011,表示为: -

0000 0000 0000 0000 0000 0000 0000 1011
Run Code Online (Sandbox Code Playgroud)

只是你不注意看到领先0's.请记住,ints是32位.

现在,~11将是: -

1111 1111 1111 1111 1111 1111 1111 0100
Run Code Online (Sandbox Code Playgroud)

所以,这是一个负数.所以,把它作为2的补充,你得到: -

0000 0000 0000 0000 0000 0000 0000 1011 // 1's complement
0000 0000 0000 0000 0000 0000 0000 1100 // 2's complement == -12
Run Code Online (Sandbox Code Playgroud)

因此,你得到-12.