>>>表示不帶符號向右移動二進位制數,移動後前面統統補0;兩個箭頭表示帶符號移動,
沒有《這種運算子,因為左移都是補零,沒有正負數的區別。
如 -12 的二進位制為:1111 1111 1111 1111 1111 1111 1111 0100;
-12 >> 3 即帶符號右移3位,結果是:1111 1111 1111 1111 1111 1111 1111 1110,十進位制為: -2;
-12 >>> 3 就是右移三位,前面補零,為:0001 1111 1111 1111 1111 1111 1111 1110,十進位制為:536870910。
在計算機中是以數值是以該數的補碼形式來表示.
正數:原碼=反碼=補碼
+12原碼:0,1100
反碼:0,1100
補碼:0,1100
負數:反碼=除符號位原碼各位取反; 補碼=反碼+1
-12原碼:1,1100
反碼:1,0011
補碼:1,0100
note:逗號之前為符號位
[x]補碼 : 連同符號位在內,每位取反,末位加一,即得到[-x]補碼.
例:8位機器字長,[-2]的補碼表示為[11111110]
各位取反(包括符號位)[00000001],末位加一為[00000010]即[2]的補碼
8位機器字長,[12]的補碼表示為[00001100]
各位取反(包括符號位)[11110011],末位加一為[11110100]即[-12]的補碼
system.out.println(integer.tobinarystring(-12));
system.out.println(integer.tobinarystring(12));
輸出結果:
11111111111111111111111111110100
1100
由結果可看出:計算機中負數的二進位制是以負數的補碼形式表示
<<(左移)和》(右移)。移位運算子組成的表示式也屬於算術表示式,其值為算術值。左移運算是將乙個二進位制位的運算元按指定移動的位數向左移位,移出位被丟棄,右邊的空位一律補0。右移運算是將乙個二進位制位的運算元按指定移動的位數向右移動,移出位被丟棄,左邊移出的空位或者一律補0,或者補符號位,這由不同的機器而定。在使用補碼作為機器數的機器中,正數的符號位為0,負數的符號位為1,
20的二進位制為 0001 0100,右移2位後為 0000 0101,則結果就為 res =5;
res = -20 >> 2;
-20的二進位制為 1110 1011,右移2位,此時高位補0,即 0011 1010,結果為 res =- 5;
左移沒有《運算子!
原碼 反碼 補碼運算規則
在學習原碼,反碼和補碼之前,需要先了解機器數和真值的概念.1 機器數 乙個數在計算機中的二進位制表示形式,叫做這個數的機器數。機器數是帶符號的,在計算機用乙個數的最高位存放符號,正數為0,負數為1.比如,十進位制中的數 3 計算機字長為8位,轉換成二進位制就是00000011。如果是 3 就是 10...
原碼 反碼 補碼
正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...
原碼 反碼 補碼
正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...