定點數
原碼
最高位是符號位,0表示正號,1表示負號,其余的n-1位表示數值的絕對值。
數值0的原碼表示有兩種形式:
[+0]原=0 0000000
[-0]原=1?0000000
例:1010
最高位為1表示這是一個負數,
其它三位 010 = 0*2^2 + 1*2^1 + 0*2^0 = 2
所以 等于 -2
反碼
原碼最大的問題就在于一個數加上它的相反數不等于0
如:0001 + 1001 = 1010? ? ?
? ? ? ? 1? ? ? +(-1)= 2
正數的反碼 還是等于原碼
負數的反碼 就是它的原碼除符號位外,其它位按位取反
數值0的反碼表示有兩種形式:
[+0]反=0 0000000
[-0]反=1 1111111
例:1 + (-1)
原碼為? ?0001 和 1001
取反碼相加? 0001 + 1111 = 1111
再將結果變回原碼? 1000,等于 -0
但是反碼計算也不都是正確的
例如:?(-1)+(-3)? ?用反碼計算結果是 -5
因為反碼只是計算的中間環節。最終由補碼進行計算。
補碼
正數的補碼? 等于它的原碼
負數的補碼? 等于 反碼+1 或 等于 (2^機器字長 - |負數|)的原碼
數值0有唯一的編碼:
[+0]補=0 0000000
[-0]補=0?0000000
計算機中均采用補碼進行加減運算
例:若機器字長為4,計算 6 - 2
6 的補碼為? 0110
-2 的補碼為? (2^4 - |-2|) = 14 = 1110
0110 + 1110 =? 0100 = 4
移碼
移碼:補碼的符號位取反
移碼的主要用途是 表示浮點數的指數(階碼)
總結
正數 | 負數 | |
原碼 | 最高位為符號位,0表示正號 其他位存放該數的二進制的絕對值 | 最高位為符號位,1表示正號 其他位存放該數的二進制的絕對值 |
反碼 | 等于原碼 | 按它的原碼,除符號位外,按位取反 |
補碼 | 等于原碼 | 反碼+1 或(2^機器字長 - |負數|)的原碼 |
移碼 | 補碼的符號位取反 |
浮點數
N = 尾數 * 基數^階碼(指數)
浮點數的表示格式:
階符 | 階碼(移碼) | 數符 | 尾數(補碼) |
尾數:用補碼表示,位數決定數的有效精度,位數越多精度越高
階碼:用移碼表示,位數決定數的表示范圍,位數越多范圍越大
對階時,小數向大數看齊
對階是通過較小數的尾數右移實現的