一,原碼
原碼表示法規定:用符號位和數值表示帶符號數,正數的符號位用 「0」 表示,負數的符號位用 「1」 表示,數值部分用二進位制形式表示。
如:在八位編碼下,原碼 取值從 -2^7+1~+2^7-1
x[原] = 0111 1111 x= 2^7-1
x[原] = 0000 0000 x=+0
x[原] = 1000 0000 x=-0
x[原] = 1111 1111 x=-2^7+1
原碼的缺陷:1,因為有著正0 和 負0,所以 原碼只能表示 2^8-1 個數。
2,正負原碼無法直接相加,在計算機內部計算麻煩。因為要把符號位和數值位分開計算。
如 2+(-1)= 1,但 00000010 +10000001=10000011 其真值為 -3
因為原碼有著這樣的缺陷,所以在計算機內部,更常用的數值表示方法是補碼。
二,補碼
補碼表示法規定:正數的補碼與原碼相同,負數的補碼為對該數的原碼除符號位外各位取反,然後再加一
如: 在八位編碼下,補碼 取值從 -2^7~+2^7-1
設真值 x=1,y=--2
則 [x]原=0000 0001 [x]補=0000 0001
[y]原=1000 0010 [y]補=1111 1110
另外:補碼中 +0 和 -0 的補碼是相同的。設 a = +0,b = -0
由於 a 是正數,所以補碼與原碼相同,所以
[a]補 = 0000 0000
而 [b]原=1000 0000 本來 [b]補= 1 0000 0000 ,
但由於計算機的定長,進製的話就被截掉了,所以 1 被截掉了,於是
[b]補 = 0000 0000
這樣 +0 和 -0 就統一了。
發現:由於 +0 和 -0 共用相同的補碼,所以相對原碼來說,就多了乙個不用的補碼:
[n]補 = 1000 0000
於是規定 [-128]補 = 1000 0000
三,比較
在計算機中 正數表示形式 都是一樣的 但 負數 卻有三種表示方法:原碼,反碼,補碼
三碼之間的比較:
其中 原碼表示形式簡單,適於乘除運算 ,
但其加減運算就比較複雜了,因為要區分正負號 與數值部分,較為麻煩。
於是為了解決減法,引入了 反碼和補碼,
反碼和補碼 其減法可以用加法實現,且數的符號位可以和數值一樣參與運算。
至於說反碼和補碼有什麼區別的話, 可以將補碼認為是反碼的優化版。
其實 反碼和補碼 就差在那個 末位加一上。
這一加 1,不僅統一了反碼 +0 和 -0 的問題,
還擴大的反碼數值表示範圍 (其實也就多加了乙個數)
春宵 宋 蘇軾
春宵一刻值千金,花有清香月有陰。
歌管樓台聲細細,鞦韆院落夜沉沉。
學習筆記 關於原碼與補碼
二進位制原碼 最高位為符號位,最高位為0時表示正數,為1時表示負數,如 1111 1111 127 0111 1111 127 此時稱為原碼 true form 但原碼不能直接參與運算,如 1000 0001 1 0000 0001 1 1 1 1000 0001 0000 0001 1000 00...
關於原碼反碼及補碼
首先,在有符號數中,正數的原始碼,反碼和補碼都是相同的,首位為符號位 正數為0 後面的以二進位制數值表示其數值。接下來看負數 在原始碼中,負數也類似於正數的表示,不過符號位變為了1 原始碼表示負數是最簡單的也是最容易理解的,符號位表示正負號,其餘位轉化為二進位制即可。但是原始碼存在許多缺陷,比如0的...
關於原碼,補碼和反碼
數值在計算機中表示形式為機器數,計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的是十進位制.數值有正負之分,計算機就用乙個數的最高位存放符號 0為正,1為負 這就是機器數的原碼了.假設機器能處理的位數為8.即字長為1byte,原碼能表示數值的範圍為 127 0 0 127 共256個...