如果我在Java中打印出~100
,我会得到-101
。我正试图手工解决这个问题。
NOT(~
)运算符反转所有位。
100
为00000000000000000000000001100100
。
反转其位给出:
11111111111111111111111110011011
现在怎样?我如何获得-101
?
答案 0 :(得分:10)
Java使用两个补码(参见§4.2原始类型和值)要否定,你可以选择补码并添加一个。
-x = ~x + 1
~x = -x - 1
~100 = -100 - 1
另一种思考方式是注意:
11111111111111111111111111111111 = -1
然后做:
11111111111111111111111111111111 (-1)
- 11111111111111111111111110011011 (~x)
= 1100100 (100)
-1 - ~x = 100
-1 - 100 = ~x
~x = -101
答案 1 :(得分:0)
今天的大多数系统都使用2的补码系统。在这个系统中,正数与旧的二进制系统相同,而负数则不同(这有助于使用相同的位数映射另一个负数)
如果您想在此系统中取一个数字并将其转换回旧式二进制文件:
〜(NegNumber)+1