-2

我正在检查嵌入式系统中按键的 C 代码。

在下面的代码中,您可以看到带有 ! 的 if 语句 在检查 REG8 之前,在这种情况下这意味着什么?我只是询问字符(!)而不是代码的作用。

if(!(REG8(DataRegA) & 0x80)){ 
*key=REG8(DataRegA) & 0x0F;
return(1); 
}
4

4 回答 4

2

这意味着该按钮在较低时处于活动状态,更广为人知的是active low

于 2013-08-29T18:11:21.910 回答
1

该代码检查该寄存器中第 7 位的状态;如果它关闭,它将执行代码块。

  • REG8(DataRegA)大概是拿到了某个MCU寄存器的值,大概反映了某个输入信号的状态;
  • REG8(DataRegA) & 0x80与 执行按位与0x80,如果未设置第七位,则返回 0,0x80否则返回;
  • the!是逻辑否定运算符;在!(REG8(DataRegA) & 0x80)它否定上面的表达式,即如果它是0它变成1,如果它是非零它变成0。

因此,if仅当寄存器中的第 7 位未设置时才执行主体。

于 2013-08-29T18:20:18.423 回答
0

这 !如果操作数为非零,则运算符产生 0,如果其操作数为 0,则产生 1,如果条件为非零,则 if 语句执行其主体。因此,如果REG8(DataRegA) & 0x80计算结果为 0(这会使 if 语句块中的代码不执行),则 ! 运算符将反转它并使其执行。

于 2013-08-29T18:12:19.820 回答
0

!是布尔运算符。所以如果<expr>为真(即非零),!(<expr>)则为假(零),反之亦然。

于 2013-08-29T18:15:32.787 回答