对补码的了解

以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 + 真值+其他正数) (真值表示,溢出)= (真值+其他正数) (真值表示)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章