java中int类型的高位是哪一位?

Anu*_*dey 0 java bit

我在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)

但是没有一个位是高阶位。是哪一点?

Era*_*ran 6

如果您要打印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)