作业帮 > 数学 > 作业

补码的计算问题对补码的问题我可能有误解,算的老是和结果对不住.还望高手能够指教.比如:-60+53先换成补码:-60=1

来源:学生作业帮 编辑:拍题作业网作业帮 分类:数学作业 时间:2024/05/15 09:53:06
补码的计算问题
对补码的问题我可能有误解,算的老是和结果对不住.还望高手能够指教.
比如:-60+53
先换成补码:-60=10111100 53=00110101
加在一起我是这样算的:01001010+11000011=10010101
这样再把10010101转换过去就是-21了,到底那点出问题了呢?
你确实错了:
-60=11000100
53=00110101
11000100+00110101=11111001
正数的补码 与原码相同.
负数的补码 符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1.
所以:-60的 最高位 为1,其余七位 为60的源码0111100取反后1000011加1为1000100 总起来就是11000100
其结果11111001,其中最高位为1,说明为负数,
其余七位1111001减1为1111000,然后取反为0000111,转换为十进制为7
总起来就是-7
最高位只是一个符号位,1就是负数,0就是正数,参与计算,但是不参与取值
关于补码问题 还有考虑宽度,例如 是按照字节来计算就是8个位,c语言中的char类型就是这种,最大取值为127到-128 ,
如果是 无符号类型,unsigned char ,那么最高位 不在代表符号,而参与取值 即0到255,没有负数.
当然c语言中的int 是32位的,原理同上.
你只所以错了,是因为混淆了 反码
例如
原码:
7的原码是0 0000111
-7的原码是1 0000111
可见原码无法进行加法计算
反码:
正数:正数的反码与原码相同.
负数:负数的反码,符号位为“1”,数值部分按位取反.
+7= 0 0000111
-7= 1 1111000
补码:
正数:正数的补码和原码相同.
负数:负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1.也就是“反码+1”.
+7= 0 0000111
-7= 1 1111001
a.采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化.正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值.采用补码进行运算,所得结果仍为补码.