java中int类型的高位是哪一位?
Which bit is the higher order bit in int type in java?
我在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");
}
}
}
}
但是 none 的位是高阶位。是哪位?
如果您要打印 5
和 -5
的二进制表示:
System.out.println (Integer.toBinaryString (5));
System.out.println (Integer.toBinaryString (-5));
您将获得:
101
11111111111111111111111111111011
或者,如果我们添加前导 0
s:
00000000000000000000000000000101
11111111111111111111111111111011
如您所见,这 2 种表示的不同之处不仅仅是符号位(最左边的位)。因此您的代码不正确。
设置5
的二进制表示的符号位:
System.out.println (5|(1<<31));
不会导致 -5
,它会导致:
-2147483643
我在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");
}
}
}
}
但是 none 的位是高阶位。是哪位?
如果您要打印 5
和 -5
的二进制表示:
System.out.println (Integer.toBinaryString (5));
System.out.println (Integer.toBinaryString (-5));
您将获得:
101
11111111111111111111111111111011
或者,如果我们添加前导 0
s:
00000000000000000000000000000101
11111111111111111111111111111011
如您所见,这 2 种表示的不同之处不仅仅是符号位(最左边的位)。因此您的代码不正确。
设置5
的二进制表示的符号位:
System.out.println (5|(1<<31));
不会导致 -5
,它会导致:
-2147483643