C 带字节的布尔运算

C 带字节的布尔运算,c,boolean,C,Boolean,有一行代码可以读取 while(!(IFG2&UCA0TXIFG)) IFG2是一个8位寄存器,其第二个LSB是UCA0TXIFG。在这种情况下,我认为while()的参数必须是布尔值。如何将IFG2&UCA0TXIFG计算为布尔运算?IFG2是否由其LSB进行评估 LSB是另一个中断标志UCA0RXIFG。如果上述情况属实,程序员为什么不直接编写UCA0RXIFG&UCA0TXIFG IFG2&UCA0TXIFG如何作为布尔运算计算 不会的 评估正常。结果是一个整数,然后在布尔上下文

有一行代码可以读取

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

LSB是另一个中断标志
UCA0RXIFG
。如果上述情况属实,程序员为什么不直接编写
UCA0RXIFG&UCA0TXIFG

IFG2&UCA0TXIFG如何作为布尔运算计算

不会的

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

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

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


您应该检查。

我认为您混淆了&和&&运算符。&&运算符比较布尔值。比较位值并返回数据(&R)。例如,1&1==真,因此对比较的位输出1。如果有8个真位,则11111111是输出。然后用这个!表达式要与布尔值相反。任何整数或指针值都可以用作布尔值。零和null指针表示false,非零和非null表示true。@AlexandreTryHardLeblanc
&
不“比较布尔值”。它对整数和指针进行运算,并生成一个
int
。但是,它执行一个逻辑and运算(即,如果两个参数的计算结果均为非零,则为1,否则为0)。@OP:C在C99下甚至没有布尔值。你需要读一本初级C语言书。@H2CO3是的,我不好,我想说的确实是一个逻辑的“and”运算。我应该修正我的语言。但我不确定这对op有多大影响