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