原碼就是符號位加上真值的絕對值,即第一位表示符號,其餘為表示值,比如8位二進位制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符號位,所以8位二進位制的取值範圍是:
[1111 1111 , 0111 1111]
即 -(27-1)~(27-1)
即 [-127 , 127]
整數的反碼是其本身,負數的反碼是原碼的基礎上,符號位不變,其餘各位取反:
[+1] = [0000 0001]原 = [0000 0001]反
[-1] = [1000 0001]原 = [1111 1110]反
整數的補碼是其本身,負數的補碼在其原碼的基礎上,符號位不變,其餘各位取反,最後+1(即反碼基礎上+1):
[+1] = [0000 0001]原 = [0000 0001]反 = [0000 0001]補
[-1] = [1000 0001]原 = [1111 1110]反 = [1111 1111]補
<< 代表左移,不分正負,低位補0:
以下資料型別預設為byte-8位
正數:r = 20 << 2
20的二進位制補碼:0001 0100
向左移動兩位後:0101 0000
結果:r = 80
負數:r = -20 << 2
-20 的二進位制原碼 :1001 0100
-20 的二進位制反碼 :1110 1011
-20 的二進位制補碼 :1110 1100
左移兩位後的補碼:1011 0000
反碼:1010 1111
原碼:1101 0000
結果:r = -80
>> 代表右移,如果該數為正,則高位補0,如果為負數,則高位補1:
以下資料型別預設為byte-8位
正數:r = 20 >> 2
20的二進位制補碼:0001 0100
向右移動兩位後:0000 0101
結果:r = 5
負數:r = -20 >> 2
-20 的二進位制原碼 :1001 0100
-20 的二進位制反碼 :1110 1011
-20 的二進位制補碼 :1110 1100
右移兩位後的補碼:1111 1011
反碼:1111 1010
原碼:1000 0101
結果:r = -5
>>>表示無符號右移,也叫邏輯右移,即若該數為正,則高位補0,而若該數為負數,則右移後高位同樣補0:
正數: r = 20 >>> 2
的結果與 r = 20 >> 2 相同;
負數: r = -20 >>> 2
以下資料型別預設為int 32位
-20:原始碼:10000000 00000000 00000000 00010100
反碼:11111111 11111111 11111111 11101011
補碼:11111111 11111111 11111111 11101100
右移:00111111 11111111 11111111 11111011
結果:r = 1073741819
<< 左移,向左移動幾位就是乘以2的幾次冪
>>右移,向右移動幾位就是除以2的幾次冪
比如,最有效的計算出2*8的結果:2<<3
原碼 反碼 補碼
正數 原碼 反碼 補碼一樣 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 當...
原碼 反碼 補碼
數值在計算機中表示形式為機器數 計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的 是十進位制,正如亞里斯多德早就指出的那樣,今天十進位制的廣泛採用,只不過我們絕大多數人生來具有10個手 指頭這個解剖學事實的結果.儘管在歷史上手指計數 5,10進製 的實踐要比二或三進製計數出現的晚.摘...