原碼 反碼 補碼

2021-07-02 12:05:06 字數 1576 閱讀 3403

原碼:

* 最高位為符號位,符號位為0表示正數,符號位為1表示負數

* 其餘部分用二進位制的絕對值表示

// 7的原碼

0000

0111

// -1的原碼

1000

0111

反碼:

* 正數,原碼與反碼相同

* 負數,在原碼的基礎上,符號位不變,其餘部分取反

// 7的反碼

0000

0111

// -7的反碼

1111

1000

補碼:

* 正數,原碼、反碼和補碼都相同

* 負數,在反碼的基礎上,末位加1

// 7的補碼

0000

0111

// -7的補碼

1111

1001

// 1 + 1

0000

0001 ; 1

0000

0001 ; 1

0000

0010 ; 2

// 2 - 1 = 2 + (-1)

0000

0010 ; 2

1111

1111 ; -1

10000

0001 ; 1,byte儲存最高位的1被丟棄

byte為例

// 整數最大, 符號位為0,其餘都是1, 那位10進製為127

0111

1111 ; 原碼、反碼、補碼

// 負數最大,符號位為1,其餘也為1, 那麼10進製為-127

1111

1111 ; 原碼

1000

0000 ; 反碼

1000

0001 ; 補碼

// +0

0000

0000 ; 原碼、反碼、補碼都一樣

// -0

1000

0000 ; 原碼

1111

1111 ; 反碼

10000

0000 ; 補碼、最高位1被丟棄,所以+0和-0的儲存是一樣

// byte有8位,一共2的8次方,256種組合,-127~127一共是255種,還剩下一種 1000 0000

// 以下僅是個人理解

// 由於最高位是符號位,所以不能是正數,那麼假設它是負數

11000

0000 ; 補碼

// 末位-1

10111

1111 ; 反碼

// 取反

11000

0000 ; 原碼 ; -128

因此,我認為1000 0000是-128,有三個原因:

1. 1000 0000 必須表示乙個數,不用白不用啊

2. 正數最高位不能為0

3. -128, 除去符號位不說,其餘位剛剛好滿足128

取值範圍:(2的n-1)-1 ~ -(2的n-1)

原碼 反碼 補碼

正數 原碼 反碼 補碼一樣 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進製 的實踐要比二或三進製計數出現的晚.摘...