原碼 反碼 和 補碼。

2021-06-23 09:26:12 字數 1304 閱讀 5201

這裡只講下自己對反碼的理解。大家都知道使用反碼表示負數有兩個優點,

1. 可以使得減法可以和加法一樣。

2. 符號位也參與了運算。

那這是為什麼呢?下面可以進行一些簡單的數學推導:

根據反碼定義,對於負數,反碼是除符號為以外取反+1。

例如,-4 變換步驟如下。

a: +4     = 0 000 0100

b: 取反  = 0 111 1011

c: +1     = 1 111 1100 (並設符號為1,表示負數)

其中,在忽略符號位的情況下:

a 到 b 的取反可以發現實際是,

b = 127 - a

所以,c = 127 - a + 1 = 128 - a 

所以當乙個計算x - y的時候,按照反碼規則,

我們計算的二進位制(忽略符號位)。實際是:v = x + ( 128 - y )

這裡可以看到反碼的作用,的確是通過反碼的編碼將減法變成了加法。

然後考慮到符號位,

(1)例e2,假設x - y >= 0,那麼v >= 128。二進位制表示的話就會產生向最高位進製(導致最高位-即符號位+1)。

由於存在負數(最高位為1),所以變為0.(同時進製被捨棄 即 例e2中括號中的1丟棄)

實際效果是v - 128 ,即x - y.

(2) 見例e1,假設x - y < 0,那麼不會有進製,所以最高為為1,表示負數。記住對於x取反+1,實際是進行了128 - x的操作。

所以 128 - v(即二進位制的取反+1)的 -( x - y), 由於知道是負數,加個負號就是x - y了。

例子e1:

3 - 4 = -1.

+3: 0 000 0011

-4: 1 111 1100

1 111 1111

最高位為1,所以為負數。取反+1得值為000 0001,所以是-1.

***************= 例子分割********************===

例子e2:

4 - 3 = 1

+4: 0 000 0100

-3: 1 111 1101

(1)0 000 0001

特別的對於y=  128 - x  ( 0 <= x <= 127  )

對於-128( 1 000 0000 )的值對應的是正數的0(0 000 0000 ) 來對映的。

對於,為什麼可以表示[-128,-1]這個我還沒大弄明白。不過肯定和取反之後的+1 有關係。

x + (128 - y) = 0有關。

附上講解才除法的

原碼 反碼和補碼

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

原碼 補碼和反碼

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

原碼 反碼和補碼

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