补码加法溢出逻辑公式OVR=Cs XOR Cs+1的矛盾疑问
补码溢出矛盾问题的解析
- 首先明确4位补码的可表示范围:-8 ~ +7,其中
1100是-4的补码,1000是-8的补码。 - 计算
1100 + 1100:二进制相加得到11000,截断4位后结果为1000,对应十进制的-8,这个结果完全在4位补码的可表示范围内,不存在溢出。你之前错误判断该运算存在溢出,这是核心问题所在。 - 再看溢出逻辑函数
OVR = Cs XOR Cs+1的定义:- Cs是符号位的进位输入(即次高位向符号位的进位),这里次高位(第2位)相加产生的进位为1;
- Cs+1是符号位的进位输出(符号位相加后产生的进位),这里符号位(第3位)相加加上输入进位后产生的进位为1;
- 两者异或结果为
1 XOR 1 = 0,表示无溢出,这和实际运算结果完全一致,不存在矛盾。
内容的提问来源于stack exchange,提问作者Nicholas Humphrey
相关产品推荐
相关产品推荐

