如何在C中实现借用标志

时间:2013-07-19 15:30:46

标签: c

如何通过减去两个8位数来计算借位标志?

我发现这个借用标志描述,但我仍然无法理解如何做到这一点?

  

如果减去两个数字,也会设置进位(借位)标志   要求借入减去的最重要(最左边)位。

我想我需要一个班轮。因为使用循环计算是一个很大的瓶颈。很高兴看到解释借旗如何运作。

感谢。

2 个答案:

答案 0 :(得分:4)

如果您要减去x - y,则y > x同时将yx视为无符号数量时,会发生借入(随身携带)。因此你应该对C代码没问题:

b = (unsigned)y > (unsigned)x;

如果您想要处理器实际计算的方式,那么

x7 = x >> 7;
y7 = y >> 7;
r7 = (x - y) >> 7;
b = (~x7 & y7) | (y7 & r7) | (r7 & ~x7);

这是2位数字的真值表:

 x     y     r   b
00    00    00   0
00    01    11   1
00    10    10   1
00    11    01   1
01    00    01   0
01    01    00   0
01    10    11   1
01    11    10   1
10    00    10   0
10    01    01   0
10    10    00   0
10    11    11   1
11    00    11   0
11    01    10   0
11    10    01   0
11    11    00   0

你可以看看,例如the HC12 Reference中的SBA指令。这恰好使用了上面给出的b的表达式。

答案 1 :(得分:3)

a - b完全等同于a + (-b),实际上它通常是用硬件计算的。因此,借用标志实际上等同于carry flag

在您的情况下,进位标志的值等于结果的第9位的值。