基于1's补码的二进制运算任务及结果错误原因咨询
基于1's补码的二进制运算任务及结果错误原因咨询
任务要求
将 $A = (12.5){10}$ 和 $B= (1.45){16}$ 转换为二进制格式,要求整数部分含符号位共6位,小数部分3位;使用1's补码计算 $-A - B$。
我的计算过程
- 先将A、B转为二进制:$A = 1100.1$,$B = 1.010$
- 按照格式要求补位(整数部分含符号位6位,小数部分3位):
- 正数符号位为0,所以 $A = 001100.100$,$B = 000001.010$
- 取A、B的1's补码(用于表示$-A$和$-B$):
- $[-A]_1 = 110011.011$,$[-B]_1 = 111110.101$
- 将两个补码相加:$110011.011 + 111110.101 = 110010.000$,同时产生进位1
- 按照规则把进位1加到结果上,得到 $110011.000$
- 由于结果符号位为1,判断为负数,取其1's补码并加负号,得到 $-001100.111$,对应十进制为$-12.875$
我的疑问
正确结果应该是$-13.75$,但我的计算结果不对。我知道如果不加进位的话,直接取补码就能得到正确结果,但我之前学到的规则是必须把进位加到结果上,如果结果为负数就取补码加负号。为什么这次不适用?我不想死记步骤,想弄明白其中的原理。
备注:内容来源于stack exchange,提问作者user20194358
相关产品推荐
相关产品推荐

