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的结果是无符号的,有人可以解释为什么吗?

最佳答案

aint,文字a&0xaaaa也是如此。按位与运算的结果也是int。它具有32位。用

a&0xaaaa

您已经屏蔽了a中除了最低位以外的所有其他位。结果是一个正的32位int值。因此,通过打印出最低的8位
(a&0xaaaa)>>1)

您所揭示的只是a&0xaaaa中第9位的值。

请注意,即使有错误的假设,即它不比所使用的数字宽,位掩码0xaaaa仍然是16位值,而您只打印低8位。

10-08 13:04