-1

有一行代码读取

while(!(IFG2&UCA0TXIFG))

IFG2是一个 8 位寄存器,其第 2 个 LSB 为UCA0TXIFG. 在这种情况下,我认为 while() 的参数必须是布尔值。如何将IFG2&UCA0TXIFG其评估为布尔运算?IFG2 会由它的 LSB 评估吗?

LSB 是另一个中断标志UCA0RXIFG。如果以上是真的,程序员为什么不直接写UCA0RXIFG&UCA0TXIFG

4

1 回答 1

0

如何将 IFG2&UCA0TXIFG 评估为布尔运算。

它不会。

它被正常评估。结果是一个整数,然后在布尔上下文中 - 一个逻辑否定。在布尔上下文中,任何非零整数都为真。

为什么程序员不直接写 UCA0RXIFG&UCA0TXIFG?

如果我理解正确,那只是两个常量:用于获取状态特定位的位掩码。由于它们是常数,它们不依赖于系统状态,结果将是一个无限循环。

您应该检查C 中的位运算符

于 2013-11-07T18:11:34.060 回答