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

或者,如果我们添加前导 0s:

00000000000000000000000000000101
11111111111111111111111111111011

如您所见,这 2 种表示的不同之处不仅仅是符号位(最左边的位)。因此您的代码不正确。

设置5的二进制表示的符号位:

System.out.println (5|(1<<31));

不会导致 -5,它会导致:

-2147483643