一元 Not 运算符的内部工作 (~)
Internal working of Unary Not Operator (~)
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.在 using ~ 运算符上,我们得到 的反转值42 即 11010101
如果你转换前面的二进制值,输出应该是别的东西而不是 -43
碰运气用不同的数字观察模式,发现输出比多1个数字提供的初始值前面有一个前导(-)符号,如上例所示。
例如……
if num is 45 // Output is 45 -46
if num is 1001 // Output is 1001 -1002
有人可以解释一元非运算符 (~) 在内部如何工作以输出这样的结果吗?
您正在使用 有符号 整数值,它是 2 的补码。
你的结果是正确的:11010101 实际上是 -43:
-2^7 + 2^6 + 2^4 + 2^2 + 2^0 = -128 + 64 + 16 + 4 + 1 = -128 + 85 = -43
这就是所谓的补码,Java、C、C++ 等中的整数和所有定点数就是这样工作的
-x = ~x + 1
因此,例如 -1 (0xFFFF) 按位取反 (0x0) 加 1 = 0x1
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.在 using ~ 运算符上,我们得到 的反转值42 即 11010101
如果你转换前面的二进制值,输出应该是别的东西而不是 -43
碰运气用不同的数字观察模式,发现输出比多1个数字提供的初始值前面有一个前导(-)符号,如上例所示。
例如……
if num is 45 // Output is 45 -46
if num is 1001 // Output is 1001 -1002
有人可以解释一元非运算符 (~) 在内部如何工作以输出这样的结果吗?
您正在使用 有符号 整数值,它是 2 的补码。
你的结果是正确的:11010101 实际上是 -43:
-2^7 + 2^6 + 2^4 + 2^2 + 2^0 = -128 + 64 + 16 + 4 + 1 = -128 + 85 = -43
这就是所谓的补码,Java、C、C++ 等中的整数和所有定点数就是这样工作的
-x = ~x + 1
因此,例如 -1 (0xFFFF) 按位取反 (0x0) 加 1 = 0x1