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)
归档时间: |
|
查看次数: |
189 次 |
最近记录: |