手动计算~100

dog*_*ane 1 java bit-manipulation

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

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

100二进制是00000000000000000000000001100100.

反转其位给出:

11111111111111111111111110011011

怎么办?我怎么得到-101

Mat*_*hen 10

Java使用二进制补码(参见§4.2原始类型和值)要取消,你可以使用补码并添加一个补码.

-x = ~x + 1
~x = -x - 1
~100 = -100 - 1
Run Code Online (Sandbox Code Playgroud)

另一种思考方式是注意:

11111111111111111111111111111111 = -1
Run Code Online (Sandbox Code Playgroud)

然后做:

  11111111111111111111111111111111 (-1)
- 11111111111111111111111110011011 (~x)
=                          1100100 (100)

-1 - ~x = 100
-1 - 100 = ~x
~x = -101
Run Code Online (Sandbox Code Playgroud)