位运算符(&,|,>>……)及二进制下负数的表示

int型是4字节32位(Java中)


位运算符 :   &,|,~,^,<<,>>,>>>


"&" 按位与,计算时将 十进制 转为 二进制 再进行计算,同位置为1,则结果为1,其余情况皆为0
3:        00000000    00000000    00000000    00000011
6:        00000000    00000000    00000000    00000110
3&6:    00000000    00000000    00000000    00000010


"|" 按位或,计算时将 十进制 转为 二进制 再进行计算,同位置为0的结果为0,其余情况皆为1
3:        00000000    00000000    00000000    00000011
6:        00000000    00000000    00000000    00000110
3|6:     00000000    00000000    00000000    00000111


"~"    按位取反,将二进制下所有为0的数换位1,为1的都换位0
3:        00000000    00000000    00000000    00000011
~3:      11111111      11111111      11111111      11111100


"^"    按位异或,只有0和1的时候为1,0和0为0,1和1也为0
3:        00000000    00000000    00000000    00000011
6:        00000000    00000000    00000000    00000110
3^6:       00000000    00000000    00000000    00000101


"<<" 左移运算,a<<b,将a转为二进制后左移b为,地位补0
3:                            00000000    00000000    00000000    00000011
3<<1:             0         00000000    00000000    00000000    00000110
3<<6:        000000    00000000    00000000    00000000    11000000


">>" 右移运算,a>>b,将a转为二进制后向右移b位,高位补0,负数时高位补1
3:          00000000    00000000    00000000    00000011
3>>6:    00000000    00000000    00000000    00000000    000011
3>>1:    00000000    00000000    00000000    00000001    1


">>>"无符号右移运算,a>>>b,将a转为二进制,向右移b位,低位去掉,高位不管是0还是1都补0
-4:          11111111     11111111    11111111    11111100
-4>>>4:    00001111    11111111    11111111    11111111    1100



二进制下负数的表示:这个数的反码加1
5:               00000000    00000000    00000000    00000101
5的反码:    11111111      11111111       11111111     11111010
-5:              11111111      11111111       11111111     11111011


代码测试:

        //10:        00000000  00000000    00000000    00001010
        //10>>1:     00000000  00000000    00000000    00000101
   
        System.out.println(3&6);
        System.out.println(3|6);
        //3:         00000000  00000000    00000000    00000011
        //~3:       11111111  11111111    11111111    11111100
        //4:        00000000  00000000    00000000    00000100
        //4反码:   11111111  11111111    11111111    11111011
        //-4:       11111111  11111111    11111111    11111100
        System.out.println(~3);

        System.out.println(3^6);

        System.out.println(3>>6);

        System.out.println(3>>1);

        System.out.println(-4>>>4);

运行结果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章