我正在尝试位操作,有人可以提供可以帮助我解决位操作的基本知识吗? 我面临以下差异。
System.out.println((~1)&1111); gives 1110. Treating ~1 as 0.
System.out.println((~1)); gives -2.
最佳答案
来自official tutorial通过甲骨文:
The unary bitwise complement operator "~" inverts a bit pattern; it can be applied to any of the integral types, making every "0" a "1" and every "1" a "0"
~1
得到 -2 的原因是 2-complement :
0000 0000 0000 0000 0000 0000 0000 0001
倒置的是
1111 1111 1111 1111 1111 1111 1111 1110
由于 Java 使用 2 补码,因此结果为 -2
。
将 (~1)&1111 分解为几位:
1111 1111 1111 1111 1111 1111 1111 1110
0000 0000 0000 0000 0000 0100 0101 0111
___________________________________________
0000 0000 0000 0000 0000 0100 0101 0110
0100 0101 0110
以 10 为基数表示为 1110
关于java - Java 中使用否定的位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34465750/