4 位二进制补码溢出
4-bit Two's complement overflow
我有一个我无法理解的概念性(ish)问题。我有一个作业,它告诉我选择以下哪个 4 位二进制(2 的补码)加法会导致溢出。以下是:
- 一个。 1011+1001
- 乙。 1100+1101
- C。 0111+1000
- D. 1010+0110
A得到10100,B得到11001,C得到1111,D得到10000
明明只有一个答案,但是A、B、D都产生了溢出。它们以 5 位而不是 4 位结束。当我问老师他是否想说其中哪一个不会产生溢出时,但他说这个问题是正确的。他给了我这个提示:
对于4位无符号数,溢出意味着2个数的和不能用无符号位表示。对于 4 位 2 的补码,溢出是指两个数的和不能用 4 位 2 的补码表示。
但这对我没有帮助,因为这已经是我的理解-对于A,B,D,总和无法用4位2的补码表示。我做错了什么?
对于二进制补码表示,表示的最高位具有负值:-(2k-1) 而不是 2k-1 用于 k 位表示。这意味着当您添加它们时,您不能只查看顶部全加器的进位(示例中的第 5 位输出)——您需要将其与进位 in 到最高位,只有两个进位不同时才会溢出。这里实际发生的是你减去进位到最高位,而不是添加它。
所以要更详细地查看示例 B:
first value 1 1 0 0
second value 1 1 0 1
carry value 1 1 0 0
result 1 0 0 1
所以在这种情况下,进位in到符号位与进位相同,所以不会溢出——1001的4位2s补码结果是正确的。
你必须忽略第五位。我们正在计算模 16,只有 4 位。
- A -5 + -7 = -12 但结果 4
- B -4 + -3 = -7
- C 7 + -8 = -1
- D -6 + 6 = 0
所以溢出发生在A.
第五位缺失。 在处理器中它会像一个溢出的进位标志。
只有当两项的符号相同时才会发生溢出:sign1 xor sign2 = 0。结果符号不同。 在处理器中通常有一个符号标志和这样一个溢出标志。
逻辑:-8 以下两个负数,或 7 以上两个正数。
我有一个我无法理解的概念性(ish)问题。我有一个作业,它告诉我选择以下哪个 4 位二进制(2 的补码)加法会导致溢出。以下是:
- 一个。 1011+1001
- 乙。 1100+1101
- C。 0111+1000
- D. 1010+0110
A得到10100,B得到11001,C得到1111,D得到10000
明明只有一个答案,但是A、B、D都产生了溢出。它们以 5 位而不是 4 位结束。当我问老师他是否想说其中哪一个不会产生溢出时,但他说这个问题是正确的。他给了我这个提示:
对于4位无符号数,溢出意味着2个数的和不能用无符号位表示。对于 4 位 2 的补码,溢出是指两个数的和不能用 4 位 2 的补码表示。
但这对我没有帮助,因为这已经是我的理解-对于A,B,D,总和无法用4位2的补码表示。我做错了什么?
对于二进制补码表示,表示的最高位具有负值:-(2k-1) 而不是 2k-1 用于 k 位表示。这意味着当您添加它们时,您不能只查看顶部全加器的进位(示例中的第 5 位输出)——您需要将其与进位 in 到最高位,只有两个进位不同时才会溢出。这里实际发生的是你减去进位到最高位,而不是添加它。
所以要更详细地查看示例 B:
first value 1 1 0 0
second value 1 1 0 1
carry value 1 1 0 0
result 1 0 0 1
所以在这种情况下,进位in到符号位与进位相同,所以不会溢出——1001的4位2s补码结果是正确的。
你必须忽略第五位。我们正在计算模 16,只有 4 位。
- A -5 + -7 = -12 但结果 4
- B -4 + -3 = -7
- C 7 + -8 = -1
- D -6 + 6 = 0
所以溢出发生在A.
第五位缺失。 在处理器中它会像一个溢出的进位标志。
只有当两项的符号相同时才会发生溢出:sign1 xor sign2 = 0。结果符号不同。 在处理器中通常有一个符号标志和这样一个溢出标志。
逻辑:-8 以下两个负数,或 7 以上两个正数。