带符号的二进制数的加减法通常使用补码(Two's Complement)表示法来进行计算. 补码表示法可以简化加法和减法的操作, 并且能够统一处理正数和负数.
补码表示法
- 正数:补码与原码相同.
- 负数:补码是其绝对值的二进制表示取反后加1.
例如:
- 正数
+5
的8位二进制表示为00000101
. - 负数
-5
的8位二进制表示为11111011
(00000101
取反后加1).
加法
带符号的二进制数加法与无符号二进制数加法类似, 直接按位相加即可. 如果结果超出表示范围(溢出), 则结果不正确.
示例:
00000101 (+5)
+ 11111011 (-5)
-----------
100000000 (0)
结果 100000000
超出了8位表示范围, 最高位的 1
被丢弃, 最终结果为 00000000
, 即 0
.
减法
减法可以通过将减数取补码后与被减数相加来实现.
示例:
计算 7 - 5
:
5
的补码为00000101
.-5
的补码为11111011
.- 将
7
和-5
相加:
00000111 (+7)
+ 11111011 (-5)
-----------
100000010 (+2)
最高位的 1
被丢弃, 最终结果为 00000010
, 即 +2
.
溢出检测
在进行带符号的二进制数加减法时, 可能会发生溢出. 溢出可以通过以下规则检测:
- 加法溢出:如果两个正数相加结果为负数, 或者两个负数相加结果为正数, 则发生溢出.
- 减法溢出:如果正数减负数结果为负数, 或者负数减正数结果为正数, 则发生溢出.
示例:
计算 127 + 1
(8位表示):
01111111 (+127)
+ 00000001 (+1)
-----------
10000000 (-128)
结果 10000000
表示 -128
, 发生了溢出.
总结
- 带符号的二进制数加减法使用补码表示法.
- 加法直接相加, 减法通过加补码实现.
- 注意溢出检测, 确保结果正确.