以8位有符號整數舉例,真值表示代表我們人的邏輯,機器值是數字在機器上的表示,原碼反碼補碼都是機器值
原碼:+0101011 -> 00101011 (真值->機器數)
-0101011 -> 10101011
- 對於正數與負數的加減運算,複雜繁瑣,符號位要另算(比兩數大小,誰大用誰的符號)
反碼:對於負數,符號位不變,其他取反
-0101011 原碼:10101011
反碼:11010100
- 我的理解是 反碼只是爲了推出補碼,+0101011 + -0101011 = 00101011 + 11010100 = 11111111(溢出的1去掉) 這對正數與負數的加減法也不起到作用,不能得到零,進一步引出補碼,如果將上述的結果+1,可以知道後續的4位都清零了,美好。
補碼:
對於一個負數,其補碼由其反碼+1,由上反碼可知,對+0101011 + -0101011,+1可使其結果溢出,從而達到清零的效果。
從真值角度分析,反碼 + 真值相反數 = 2^8 -1(真值表示) = 11111111
補碼 + 真值相反數 = 2^8 (真值表示)= 00000000(溢出) = 0(機器值)
補碼 = (2^8 - 真值相反數) = (2^8 + 真值) (真值表示)
其他正數 + 補碼 = 其他正數(真值表示)+ (2^8 + 真值) (真值表示)= (2^8 + 真值+其他正數) (真值表示,溢出)= (真值+其他正數) (真值表示)