原碼 反碼和補碼

2021-05-22 14:38:25 字數 1856 閱讀 2089

數值有正負之分

,計算機就用乙個數的最高位存放符號

(0為正

,1為負

).這就是機器數的原碼了

.假設機器能處理的位數為

8.即字長為

1byte,

原碼能表示數值的範圍為

(-127~-0 +0~127)

共256個.

有了數值的表示方法就可以對數進行算術運算

.但是很快就發現用帶符號位的原碼進行乘除運算時結果正確

,而在加減運算的時候就出現了問題,如下

: 假設字長為

8bits

( 1 )10

-( 1 )10

=( 1 )10

+ ( -1 )10

= ( 0 )10

(00000001)原

+ (10000001)原

= (10000010)原

= ( -2 )

顯然不正確.

因為在兩個整數的加法運算中是沒有問題的

,於是就發現問題出現在帶符號位的負數身上

,對除符號位外的其餘各位逐位取反就產生了反碼

.反碼的取值空間和原碼相同且一一對應

. 下面是反碼的減法運算:

( 1 )10

-( 1 )10

=( 1 )10

+ ( -1 )10

= ( 0 )10

(00000001)反

+ (11111110)反

=(11111111)反

=( -0 )

有問題.

( 1 )10

-( 2)10

=( 1 )10

+ ( -2 )10

= ( -1 )10

(00000001)反

+ (11111101)反

=(11111110)反

=( -1 )正確

問題出現在

(+0)

和(-0)上,

在人們的計算概念中零是沒有正負之分的

.(印度人首先將零作為標記並放入運算之中

,包含有零號的印度數學和十進位制計數對人類文明的貢獻極大).

於是就引入了補碼概念

. 負數的補碼就是對反碼加一

,而正數不變

,正數的原碼反碼補碼是一樣的

.在補碼中用

(-128)

代替了(-0),

所以補碼的表示範圍為:

(-128~0~127)

共256個.

注意:(-128)

沒有相對應的原碼和反碼

, (-128) = (10000000)

補碼的加減運算如下:

( 1 )10

-( 1 )10

=( 1 )10

+ ( -1 )10

= ( 0 )10

(00000001)補

+ (11111111)補

=(00000000)補

= ( 0 )正確

( 1 )10

-( 2)10

=( 1 )10

+ ( -2 )10

= ( -1 )10

(00000001)補

+ (11111110)補

=(11111111)補

= ( -1 )正確

所以補碼的設計目的是:

⑴使符號位能與有效值部分一起參加運算

,從而簡化運算規則.

⑵使減法運算轉換為加法運算

,進一步簡化計算機中運算器的線路設計

所有這些轉換都是在計算機的最底層進行的,而在我們使用的彙編、

c等其他高階語言中使用的都是原碼。看了上面這些大家應該對原碼、反碼、補碼有了新的認識了吧!

原碼 反碼 和 補碼。

這裡只講下自己對反碼的理解。大家都知道使用反碼表示負數有兩個優點,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 原 ...

原碼 反碼和補碼

首先說一下機器數和真值 1 機器數 數在計算機中的二進位制表示形式就稱為機器數。機器數是帶符號的,在計算機用乙個數的最高位存放符號 0為正,1為負 這樣就將數的符號數值化了。比如,十進位制中的數 5 計算機字長為8bits,轉換成二進位制就是00000101。如果是 5 就是 10000101 那麼...