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
------------------------------
我知道我正在做的事情有问题,但我无法弄明白。
答案 0 :(得分:1)
5是00000101
-5是11111010 + 00000001 = 11111011
〜( - 5)是00000100
所以你得到4。
答案 1 :(得分:1)
你开始时是-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)
答案 2 :(得分:0)
我还没有做过多少事情,但是在阅读维基百科几秒后看起来似乎不是-5 = 4,在维基百科上他们使用 NOT x = -x - 1 。所以程序是正确的。
编辑:对于无符号整数,使用 NOT x = y - x ,y是整数可以容纳的最大数。