【发布时间】:2017-07-17 15:35:22
【问题描述】:
x = 30
y = -29
我们如何处理二进制加法的溢出? 我以为我明白了,但这是我将两个加到 30 时得到的结果。
Two's Complement 30 representation:
0001 1100 x = 30
x+2 = 32
0001 1110
+ 0000 0010
------------
0010 0000
这不等于 32,正数吗? 答案键是 x + 2 = -32,虽然它表明存在溢出,但我不确定我可以在哪里进行逻辑跳跃/假设它会是负数。
请向我解释这个推理来自哪里/我哪里出错了。谢谢!
编辑:图片似乎从链接中消失了。
【问题讨论】:
-
你了解 2-complement 的工作原理吗?你读过en.wikipedia.org/wiki/Two's_complement,例如(那里还有“为什么有效”部分)?
-
我真的不明白我们怎么能说十六进制表示是 0x20,如果它是一个正数。这似乎表明它至少是 0x80 数字,因为前导位必须是 1 才能使二进制补码为负。
-
@SergGr 我了解二的补码,这就是为什么我对如何从 30 点到 32 点的负数有点困惑,难道我们不应该最大翻转/最重要的位?所以如果我们加两个,我们仍然在一个正范围内。 x + 2 不会导致溢出。
-
显然从
y的表示方式来看,在此任务中,数字存储在 6 位容器中,而不是当今更典型的 8 位字节。 -
@SergGr 六位容器如何影响计算?它是改变我们位的倍数还是仅仅在我们溢出时改变?
标签: assembly binary boolean-logic twos-complement