我如何计算-5的否定(〜)
How do I calculate negation(~) of -5
public class UnaryOperator {
public static void main(String[] args) {
byte a= -5;
System.out.println(~a); // prints 4
}
}
当我手动计算时,我得到的答案是 6。
我是这样做的:
128 64 32 16 8 4 2 1
0 0 0 0 0 1 0 1
因为它是一个否定,所以我将其反转为以下内容:
128 64 32 16 8 4 2 1
0 0 0 0 0 1 0 1
sign -1 1 1 1 1 0 1 0
-----------------------------
0 0 0 0 1 0 1
add one--> 0 0 0 0 0 1 1
------------------------------
0 0 0 0 1 1 0 = 6
------------------------------
我知道我正在做的事情有问题,但我无法弄清楚。
5 是 00000101
-5 是 11111010+00000001 = 11111011
~(-5) 是 00000100
所以你得到 4.
我没有做太多按位的事情,但在阅读维基百科几秒钟后,它似乎不是 -5 = 4,在维基百科上他们使用 NOT x = -x - 1.所以程序是正确的。
编辑:对于无符号整数,您使用 NOT x = y - x,其中 y 是整数可以容纳的最大数。
您从 -5 开始,它是二进制补码。因此:
-128 64 32 16 8 4 2 1
1 1 1 1 1 0 1 1 (= -5)
flip: 0 0 0 0 0 1 0 0 (= +4)
public class UnaryOperator {
public static void main(String[] args) {
byte a= -5;
System.out.println(~a); // prints 4
}
}
当我手动计算时,我得到的答案是 6。
我是这样做的:
128 64 32 16 8 4 2 1
0 0 0 0 0 1 0 1
因为它是一个否定,所以我将其反转为以下内容:
128 64 32 16 8 4 2 1
0 0 0 0 0 1 0 1
sign -1 1 1 1 1 0 1 0
-----------------------------
0 0 0 0 1 0 1
add one--> 0 0 0 0 0 1 1
------------------------------
0 0 0 0 1 1 0 = 6
------------------------------
我知道我正在做的事情有问题,但我无法弄清楚。
5 是 00000101
-5 是 11111010+00000001 = 11111011
~(-5) 是 00000100
所以你得到 4.
我没有做太多按位的事情,但在阅读维基百科几秒钟后,它似乎不是 -5 = 4,在维基百科上他们使用 NOT x = -x - 1.所以程序是正确的。
编辑:对于无符号整数,您使用 NOT x = y - x,其中 y 是整数可以容纳的最大数。
您从 -5 开始,它是二进制补码。因此:
-128 64 32 16 8 4 2 1
1 1 1 1 1 0 1 1 (= -5)
flip: 0 0 0 0 0 1 0 0 (= +4)