正数加负数的二进制计算需要通过补码运算来实现。以下是具体步骤和注意事项:
一、负数的二进制表示
正数的原码与二进制数值相同,负数的原码在绝对值部分按位取反(符号位为1)。
负数的反码是原码除符号位外按位取反。
反码加1得到补码。
二、正数加负数的计算步骤
将负数转换为补码
例如,计算 `5 + (-9)`:
- 5的二进制为 `00000000 00000000 00000000 00000101`(原码/反码/补码相同)
- -9的补码为 `11111111 11111111 11111111 11110001`(按上述方法计算)
补码相加
将正数与负数的补码按位相加,处理进位:
```
00000000 00000000 00000000 00000101 (5)
+ 11111111 11111111 11111111 11110001 (-9)
1 00000000 00000000 00000000 00000010 (结果为-4)
```
注意:最高位的进位被丢弃,因为32位整数最高位为符号位。
结果解释
- 补码 `00000000 00000000 00000000 00000010` 对应十进制 `-4`,符合预期。
三、注意事项
溢出处理
若补码相加导致最高位(符号位)发生变化,需根据具体需求处理(如截断或进位)。
负数减法
负数减法可转换为正数加法:`-A - B = A + (-B)`,其中 `-B` 为 `B` 的补码。
四、示例总结
计算 `3FH + D0H`(十进制59 + -20):
3FH(59)的补码为 `0011 1111`
D0H(-20)的补码为 `1001 0000`
相加结果为 `1 0100 1111`,截断符号位后为 `0100 1111`(十进制45)
通过补码机制,正负数二进制加法可统一处理,简化了计算机运算逻辑。