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.我缺少什么?
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.