我正在使用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)
有更好的方法吗?
答案 0 :(得分:1)
您可以通过计算a
找到整数b
,s
及其总和carry-ins = a XOR b XOR s
的所有遗产。
当然,随身携带也是前一位位置的结转。
最重要的结转(表示无符号溢出)可以用C / C ++来确定most-significant-carry-out = (a > 0xFF...FF - b)
,其中0xFF...FF
是适当的最大值,a
和b
是非负值。
减法可以减少为加法。查看我对this question和this question的回答。