手动计算~100

时间:2010-10-20 07:43:00

标签: java bit-manipulation

如果我在Java中打印出~100,我会得到-101。我正试图手工解决这个问题。

NOT(~)运算符反转所有位。

二进制文件中的

10000000000000000000000000001100100

反转其位给出:

11111111111111111111111110011011

现在怎样?我如何获得-101

2 个答案:

答案 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