原碼 反碼 補碼

2022-09-18 09:24:22 字數 1265 閱讀 5826

了解機器數、符號位(最高位)、真值的概念。

了解原碼、反碼、補碼的概念。

清楚為什麼會有反碼和補碼的出現。

掌握原碼轉變反碼、反碼轉變補碼;反碼轉變原碼、補碼轉變原碼。

現在的計算機(馮·諾依曼體系結構)採用的是二進位制,在計算機內表示一串二進位制數 01101001,稱之為機器數。計算機無法識別人類定義的加、減、乘、除、正、負等數學符號,對於如何表示正、負的二進位制數字,規定二進位制數中,最高位用「0」代表正,用「1」代表負。其餘部分的數字稱之為真值,最高位稱之為符號位。比如,01101001 二進位制數的符號位(最高位)是 0,所以,它是乙個負數,真值部分為 1101001。

原碼就是符號位加上真值的絕對值。簡單來說,原碼就是機器數。

在十進位制中\(5 - 5 = 0\)可以寫成\(5 + (-5) = 0\),對於二進位制也同樣適用。將十進位制的 5 和 -5 分別轉換成機器數(原碼),5 的機器數是 00000101;-5 的機器數是 10000101。符號位 0 代表正,1 代表負,因此,\(00000101+10000101=10001010\)的最終結果轉換為十進位制就是\(-10\)。

為什麼結果是 -10 呢?很顯然,這並不是正確的答案。然而,反碼能夠解決原碼做減法出現的問題,這也是為什麼計算機內部不使用原碼表示乙個數。

對於正數來說,反碼與原碼一致。對於負數來說,反碼就是原碼的符號位不動,真值一一取反。

00000101 的反碼依舊是 00000101;10000101 的反碼是 11111010,用反碼代替上面原碼的減法:

最後反碼相減的結果是 11111111,由於符號位是 1,即負數,所以反碼要轉換成原碼,真正的結果是 10000000,轉換為十進位制數就是「-0」。

在十進位制中,10000000 和 00000000 都代表 0,但是前者是帶有符號「正」的0,後者是帶有符號「負」的0。所以,為了區別開來,補碼就出現了。

對於正數來說,補碼與原碼一致。對於負數來說,補碼就是該數的反碼加1。

10000101 的反碼是 11111010,補碼是\(11111010 + 1 = 11111011\),用補碼代替上面反碼的減法:

由於最後的結果是十位數,所以直接捨去最高位 1。剩下部分的符號位為 0,正數的反碼和原碼以及補碼都是一致的,所以,最終結果是 0。符合\(5 + (-5) = 0\)。

原碼 反碼 補碼

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