我读过,在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");
}
}
}
}但是没有一个比特是高阶比特。这是哪一位?
发布于 2020-12-08 08:36:50
如果要打印5和-5的二进制表示
System.out.println (Integer.toBinaryString (5));
System.out.println (Integer.toBinaryString (-5));你会得到:
101
11111111111111111111111111111011或者,如果我们添加领先的0s:
00000000000000000000000000000101
11111111111111111111111111111011正如您所看到的,这两个表示形式的不同不仅仅是符号位(这是最左边的位)。因此,您的代码不正确。
设置5二进制表示的符号位
System.out.println (5|(1<<31));它不会导致-5,而是导致:
-2147483643https://stackoverflow.com/questions/65195534
复制相似问题