原碼 補碼 反碼

2021-09-27 11:38:50 字數 1645 閱讀 5878

原碼就是符號位加上真值的絕對值,即第一位表示符號,其餘為表示值,比如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進製 的實踐要比二或三進製計數出現的晚.摘...