public class bitwise_operator {
public static void main(String[] args) {
int var1 = 42;
int var2 = ~var1;
System.out.println(var1 + " " + var2);
}
}
以上代码生成 42 -43 作为输出。
据我所知, 一元非运算符 (〜)会反转其操作数的所有位。
现在,二进制文件中的 42 是 00101010 。在使用 〜 运算符时,我们得到 反转值42 即 11010101
如果您转换前面的二进制值,则输出应该是其他内容,而不是 -43
用不同的数字试试我的运气来观察模式,发现 输出比 提供的 初始值<1 em> 前面有一个前导 ( - ) 符号,如上例所示。
例如..,
if num is 45 // Output is 45 -46
if num is 1001 // Output is 1001 -1002
有人可以解释一下非一元运算符(〜)如何在内部工作以输出这样的结果?
答案 0 :(得分:3)
您正在使用带符号的整数值,该值为2的补码。
您的结果是正确的:11010101实际上是-43:
-2 ^ 7 + 2 ^ 6 + 2 ^ 4 + 2 ^ 2 + 2 ^ 0 = -128 + 64 + 16 + 4 + 1 = -128 + 85 = -43 < / p>
答案 1 :(得分:0)
这就是所谓的两个补码,它是Java,C,C ++等中的整数和所有定点数的工作原理
-x = ~x + 1
所以例如-1(0xFFFF)否定按位(0x0)加1 = 0x1