use*_*413 3 java operations bit
我读到只做& 0x7fffffff符号位的掩码,并没有篡改其他位.
int a = Integer.MIN_VALUE;
System.out.println(a & 0x7fffffff);
Run Code Online (Sandbox Code Playgroud)
但是,这段代码输出
0
Run Code Online (Sandbox Code Playgroud)
代替
2147483648
Run Code Online (Sandbox Code Playgroud)
这是为什么?
Java中的负数存储为二进制补码.因此,最小值具有符号位设置而所有其他值未设置.所以你要做的是:
10000000000000000000000000000000
& 01111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)
清除符号位后,您将得到零.
00000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
资料来源:https://en.wikipedia.org/wiki/Two%27s_complement
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |