我在java中读到,负整数是通过对正整数取2的补码来获得的。简而言之,这也意味着将高位设置为 1,以便将正整数转换为负整数。出于好奇,我试图弄清楚整数中的哪一位作为 java 中的高阶位。现在,java 中整数的限制是 -(2^32) 到 ((2^32) - 1)。所以我决定如果我继续检查 32 位位置中的每一个,我就会知道哪个是高阶位。
以下是我使用的代码。
public class Main
{
public static void main(String[] args) {
int x = 5;
for(int i = 0; i<32; i++) {
if((x|(1<<i)) == -5) {
System.out.println(i + "th bit is the higher order bit");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是没有一个位是高阶位。是哪一点?
如果您要打印5and的二进制表示-5:
System.out.println (Integer.toBinaryString (5));
System.out.println (Integer.toBinaryString (-5));
Run Code Online (Sandbox Code Playgroud)
你会得到:
101
11111111111111111111111111111011
Run Code Online (Sandbox Code Playgroud)
或者,如果我们添加前导0s:
00000000000000000000000000000101
11111111111111111111111111111011
Run Code Online (Sandbox Code Playgroud)
如您所见,这两种表示的不同之处不仅在于符号位(最左边的位)。因此您的代码不正确。
设置 的二进制表示的符号位5:
System.out.println (5|(1<<31));
Run Code Online (Sandbox Code Playgroud)
不会导致-5,它会导致:
-2147483643
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |