Java 什么是~&引用;接线员怎么办?
我发现~类似于NOT运算符,因为在二进制中,它将所有的1都更改为0,所有的0都更改为1。因此,我探索了如何处理这段代码,我发现:Java 什么是~&引用;接线员怎么办?,java,bitwise-operators,Java,Bitwise Operators,我发现~类似于NOT运算符,因为在二进制中,它将所有的1都更改为0,所有的0都更改为1。因此,我探索了如何处理这段代码,我发现: int x = 5; System.out.println(~(x - 1)); // prints -5 但是二进制中的x是0101,4是0100。在0100上使用NOT运算符将创建1011,即11。怎么会是-5?int有32位-您忘记了设置为0的其他28位,~将变为1 最好使用Integer.tobinarysting进行可视化: jshell> Inte
int x = 5;
System.out.println(~(x - 1)); // prints -5
但是二进制中的x是0101,4是0100。在0100上使用NOT运算符将创建1011,即11。怎么会是-5?
int
有32位-您忘记了设置为0的其他28位,~
将变为1
最好使用Integer.tobinarysting
进行可视化:
jshell> Integer.toBinaryString(~4)
$23 ==> "11111111111111111111111111111011"
关于为什么该值为-5:
让我们检查一下从~4+4得到的结果:
11111111111111111111111111111011
+ 00000000000000000000000000000100
----------------------------------
11111111111111111111111111111111
都是一个!如果现在添加1会发生什么
11111111111111111111111111111111
+ 1
----------------------------------
00000000000000000000000000000000
计算溢出,得到0
因此:~4+4+1=0。换句话说,~4=-4-1=-5.~是位运算符。
反转二进制表示的位
负数存储为2的补码。
5-1=4的二进制表示为0000 0100
现在,5=0000 0101的二进制表示形式
1的5的补码=1111010(反转位)
2的5的补码=1111011(将1与1的补码相加)
这等于~5
所以4的位补是~5