有一行代码读取
while(!(IFG2&UCA0TXIFG))
IFG2
是一个 8 位寄存器,其第 2 个 LSB 为UCA0TXIFG
. 在这种情况下,我认为 while() 的参数必须是布尔值。如何将IFG2&UCA0TXIFG
其评估为布尔运算?IFG2 会由它的 LSB 评估吗?
LSB 是另一个中断标志UCA0RXIFG
。如果以上是真的,程序员为什么不直接写UCA0RXIFG&UCA0TXIFG
?
如何将 IFG2&UCA0TXIFG 评估为布尔运算。
它不会。
它被正常评估。结果是一个整数,然后在布尔上下文中 - 一个逻辑否定。在布尔上下文中,任何非零整数都为真。
为什么程序员不直接写 UCA0RXIFG&UCA0TXIFG?
如果我理解正确,那只是两个常量:用于获取状态特定位的位掩码。由于它们是常数,它们不依赖于系统状态,结果将是一个无限循环。
您应该检查C 中的位运算符。