为什么 -9 & 0xaaaa 得到一个无符号的结果?
Why does -9 & 0xaaaa get an unsigned result?
convert To Binary方法用于显示8位二进制数,
public static String convertToBinary(int a){
String binary="";
for(int i=0;i<8;++i){
Integer bit=new Integer(a&1);
binary=bit.toString()+binary;
a>>=1;
}
return binary;
}
public static void main(String[] args) {
int a=-9;
System.out.println(convertBinary(a)); //11110111
System.out.println(convertBinary(0xaaaa)); //10101010
System.out.println(convertBinary(a&0xaaaa)); //10100010
System.out.println(convertBinary((a&0xaaaa)>>1));//01010001
}
最后的结果证明a&0xaaaa
的结果是无符号的,谁能解释一下为什么?
a
是一个 int
,文字 a&0xaaaa
也是。按位与运算的结果也是int
。它有 32 位。有
a&0xaaaa
你已经屏蔽掉了 a
中除了最低位之外的所有位。结果是一个正的 32 位 int
值。所以通过打印出
的最低 8 位
(a&0xaaaa)>>1)
你透露的只是a&0xaaaa
中第9位的值。
请注意,位掩码 0xaaaa
,即使有缺陷的假设它不比所使用的数字宽,仍然是 16 位值,而您只打印低 8 位。
最后的结果并不能证明>>
做了一个无符号移位(说这个值是无符号的没有意义,值只是一堆位,是操作 有符号或无符号)。
由于您只打印 8 位,因此没有查看 24 位高位,因此您没有看到唯一可能受 x >> 1
和 x >>> 1
之间差异影响的位,这是最高位。带符号的班次和不带符号的班次之间没有任何区别,所以根据那个结果你不能说发生了什么。
convert To Binary方法用于显示8位二进制数,
public static String convertToBinary(int a){
String binary="";
for(int i=0;i<8;++i){
Integer bit=new Integer(a&1);
binary=bit.toString()+binary;
a>>=1;
}
return binary;
}
public static void main(String[] args) {
int a=-9;
System.out.println(convertBinary(a)); //11110111
System.out.println(convertBinary(0xaaaa)); //10101010
System.out.println(convertBinary(a&0xaaaa)); //10100010
System.out.println(convertBinary((a&0xaaaa)>>1));//01010001
}
最后的结果证明a&0xaaaa
的结果是无符号的,谁能解释一下为什么?
a
是一个 int
,文字 a&0xaaaa
也是。按位与运算的结果也是int
。它有 32 位。有
a&0xaaaa
你已经屏蔽掉了 a
中除了最低位之外的所有位。结果是一个正的 32 位 int
值。所以通过打印出
(a&0xaaaa)>>1)
你透露的只是a&0xaaaa
中第9位的值。
请注意,位掩码 0xaaaa
,即使有缺陷的假设它不比所使用的数字宽,仍然是 16 位值,而您只打印低 8 位。
最后的结果并不能证明>>
做了一个无符号移位(说这个值是无符号的没有意义,值只是一堆位,是操作 有符号或无符号)。
由于您只打印 8 位,因此没有查看 24 位高位,因此您没有看到唯一可能受 x >> 1
和 x >>> 1
之间差异影响的位,这是最高位。带符号的班次和不带符号的班次之间没有任何区别,所以根据那个结果你不能说发生了什么。