原碼 反碼和補碼

2021-07-11 14:02:18 字數 1841 閱讀 5865

首先說一下機器數和真值:

1、機器數

數在計算機中的二進位制表示形式就稱為機器數。機器數是帶符號的,在計算機用乙個數的最高位存放符號(0為正,1為負),這樣就將數的符號數值化了。

比如,十進位制中的數 +5 ,計算機字長為8bits,轉換成二進位制就是00000101。如果是 -5 ,就是 10000101 。

那麼,這裡的 00000101 和 10000101 就是機器數。

2、真值

因為符號佔據一位,機器數的形式值就不等於真正的數值。例如上面的有符號數 10000101,其最高位1代表負,其真正數值是 -5 而不是形式值133(10000101轉換成十進位制等於133)。所以,為區別起見,帶符號位的機器數對應的真正數值稱機器數的真值。

例:00100001的真值 = 0 0100001 = +33,10100011的真值 = 1 0100011 = -35

再討論一下,各種編碼的用途:

在計算機中表示形式為機器數,計算機只能識別0和1,使用的是二進位制。而在日常生活中人們使用的是十進位制,並且我們用的數值有正負之分。於是在計算機中就用乙個數的最高位存放符號(0為正,1為負)。這就是機器數的原碼了。

有了數值的表示方法就可以對數進行算術運算,但是很快就發現用帶符號位的原碼進行乘除運算時結果正確,而在加減運算的時候就出現了問題,如下:

十進位制  (1) 10 - (1)10 = (1)10 + (-1)10 = (0)10

二進位制  (0 0000001)原 + (1 0000001)原 = (1 0000010)原 = ( -2 ) 顯然不正確。

因為在兩個正數的加法運算中是沒有問題的,於是就發現問題出現在帶符號位的負數身上。對除符號位外的其餘各位逐位取反就產生了反碼。反碼的取值空間和原碼相同且一一對應。下面是反碼的減法運算:

(1)10 - (1)10 = (1)10 + (-1)10 = (0)10

(0 0000001)反 + (1 1111110)反 = (1 1111111)反 = ( -0 ) 有問題。

(1)10 - (2)10 = (1)10 + (-2)10 = (-1)10

(0 0000001)反 + (1 1111101)反 = (11111110)反 = (-1) 正確。

問題出現在(+0)和(-0)上,在人們的計算概念中零是沒有正負之分的。

於是就引入了補碼概念。負數的補碼就是對反碼加一,而正數的補碼不變,正數的原碼反碼補碼是一樣的。在補碼中用(-128)代替了(-0),這個是人為規定的,所以補碼的表示範圍為:

(-128~0~127)共256個。

注意:(-128)沒有相對應的原碼和反碼, (-128) = (1 0000000)  補碼的加減運算如下:

(1)10 - (1)10 = (1)10 + (-1)10 = (0)10

(0 0000001)補 + (1 1111111)補 = (0 0000000)補 = ( 0 ) 正確。

(1)10 - (2)10 = (1)10 + (-2)10 = (-1)10

(00000001)補 + (11111110)補 = (11111111)補 = (-1) 正確。

所以補碼的設計目的是:

⑴ 使符號位能與有效值部分一起參加運算,從而簡化運算規則。補碼機器數中的符號位,並不是強加上去的,是資料本身的自然組成部分,可以正常地參與運算。

⑵ 使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計。

所有這些轉換都是在計算機的最底層進行的,而在我們使用的彙編、c等其他高階語言中使用的都是原碼。

原碼 反碼和補碼

數值有正負之分 計算機就用乙個數的最高位存放符號 0為正 1為負 這就是機器數的原碼了 假設機器能處理的位數為 8.即字長為 1byte,原碼能表示數值的範圍為 127 0 0 127 共256個.有了數值的表示方法就可以對數進行算術運算 但是很快就發現用帶符號位的原碼進行乘除運算時結果正確 而在加...

原碼 反碼 和 補碼。

這裡只講下自己對反碼的理解。大家都知道使用反碼表示負數有兩個優點,1.可以使得減法可以和加法一樣。2.符號位也參與了運算。那這是為什麼呢?下面可以進行一些簡單的數學推導 根據反碼定義,對於負數,反碼是除符號為以外取反 1。例如,4 變換步驟如下。a 4 0 000 0100 b 取反 0 111 1...

原碼 補碼和反碼

1 原碼表示法 原碼表示法是機器數的一種簡單的表示法。其符號位用0表示正號,用 表示負號,數值一般用二進位制形式表示。設有一數為x,則原碼表示可記作 x 原。例如,x1 1010110 x2 一1001010 其原碼記作 x1 原 1010110 原 01010110 x2 原 1001010 原 ...