0

我正在使用 tesseral 算术做一些工作,我需要检测单词特定区域的进位。由于程序的性质,位的位置取决于输入。例如,对于 32 位字长,假设输入 6 位,我有兴趣检查第 19 位和第 3 位的加法进位和第 31 位和第 15 位的减法(更一般地说,有趣的位是(字长- 1), (字长 / 2 + 输入位 / 2), (字长 / 2 - 1) 和 (输入位 / 2))。

我的想法是这样的:

  (after addition)         ((NumberToCheck & (1 << 19 + 1 << 3)) != 0)  --> carried bit(s)

  (or after subtraction)   ((NumberToCheck & (1 << 31 + 1 << 15)) != 0) --> carried bit(s)

有更好的方法吗?

4

1 回答 1

1

您可以从 integers 中找到所有进位a,并通过计算找到b它们的总和。scarry-ins = a XOR b XOR s

自然,进位也是从紧接在前的位位置的进位。

最重要的进位(表示无符号溢出)可以用 C/C++ 语言中的 来确定most-significant-carry-out = (a > 0xFF...FF - b),其中0xFF...FF是适当的最大值,ab是非负值。

减法可以归结为加法。请参阅我对这个问题这个问题的回答。

于 2012-03-01T22:33:53.317 回答