位運算符(&,|,>>……)及二進制下負數的表示

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);

運行結果:

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