原码 反码 补码 计算

来源:百度知道 编辑:UC知道 时间:2024/05/10 19:59:30
书上说补码是原码的符号位不变,其他变,如:原码11100101
反码10011010
补码10011011

但为什么很多书上确是把上题的反码写成是00011010呢?不懂,那不是全变了吗?
有没高人能帮我解释下,非常感谢!
一个字长为八位的计算机中,采用补码表示,符号位占一位,则-128在计算机中表示为:_____
-128的原码是10000000,其反码不应该是11111111,为什么是01111111,不是反码符号位不变,其余取反吗???

哦,你上面说得我都明白了,就是最后一句:为什么表数范围补码要多一个?原因在于补码中真值0只对应一个编码,而在反码中真值0对应两个编码。我不太明白,为什么只对应一个编码的反而会比对应两个编码的表数范围多一个?不好意思,麻烦你再为我讲解一下,谢谢了!

正数:正数的反码与原码相同。

负数:负数的反码,符号位为“1”,数值部分按位取反。

例如: 符号位 数值位

[+7]反= 0 0000111 B

[-7]反= 1 1111000 B

所以楼主再仔细看一下书,究竟00011010是+26的反码,还是负数的反码

----------------------------------------

特别规定:-128的补码为10000000,所以有符号字节的补码表示范围为:-128---127

-128不在表数范围之内,所以没有反码。

但是-128有补码,8位二进制位补码的表数范围是:-128≤X≤127。

为什么表数范围补码要多一个?原因在于补码中真值0只对应一个编码,而在反码中真值0对应两个编码。

你说的例子:原码:1110 0101求他的补码,
我们从题知道符号位为1,他是负整数,所以求补码是原码的符号位和最低位不变其余各位取反即可。
所以 补码为:1001 1011换成十六进制 9BH 你也可以这样解先求出他的反码在加1求得补码方法为:1001 1010+1=1001 1011即可
-128用补码表示为1000 0000

http://blog.163.com/asm_c/blog/static/248203113201011310200949/

参考。

简便方法:

正数的反码补码原码相同
负数的补码为其绝对值原码取反加一 第一位总为负