我正在检查嵌入式系统中按键的 C 代码。
在下面的代码中,您可以看到带有 ! 的 if 语句 在检查 REG8 之前,在这种情况下这意味着什么?我只是询问字符(!)而不是代码的作用。
if(!(REG8(DataRegA) & 0x80)){
*key=REG8(DataRegA) & 0x0F;
return(1);
}
我正在检查嵌入式系统中按键的 C 代码。
在下面的代码中,您可以看到带有 ! 的 if 语句 在检查 REG8 之前,在这种情况下这意味着什么?我只是询问字符(!)而不是代码的作用。
if(!(REG8(DataRegA) & 0x80)){
*key=REG8(DataRegA) & 0x0F;
return(1);
}
这意味着该按钮在较低时处于活动状态,更广为人知的是active low
该代码检查该寄存器中第 7 位的状态;如果它关闭,它将执行代码块。
REG8(DataRegA)
大概是拿到了某个MCU寄存器的值,大概反映了某个输入信号的状态;REG8(DataRegA) & 0x80
与 执行按位与0x80
,如果未设置第七位,则返回 0,0x80
否则返回;!
是逻辑否定运算符;在!(REG8(DataRegA) & 0x80)
它否定上面的表达式,即如果它是0它变成1,如果它是非零它变成0。因此,if
仅当寄存器中的第 7 位未设置时才执行主体。
这 !如果操作数为非零,则运算符产生 0,如果其操作数为 0,则产生 1,如果条件为非零,则 if 语句执行其主体。因此,如果REG8(DataRegA) & 0x80
计算结果为 0(这会使 if 语句块中的代码不执行),则 ! 运算符将反转它并使其执行。
!
是布尔非运算符。所以如果<expr>
为真(即非零),!(<expr>)
则为假(零),反之亦然。