AVR 循环中的位比较

bit comparison in loop on AVRs

我正在学习 AVR 上 C 语言的位逻辑,但遇到了问题。

我想比较 int8_t 变量的 "i" 位(从右边开始),如果它是 1,则执行下一条指令,但它不起作用。这是我写的:

if (variable & (1<<i)==(1<<i)) instruction;

在以下数据的示例中:

uint8_t dot=0101;
PORTC=1;
for (int i=0; i<4; i++)
{
    PORTB = fourDigit[i];
    if (dot & (1<<i)==(1<<i)) PORTB--;
    PORTC<<=1;
}

点(因为它连接到 PB0)应该在第一和第三位点亮,但目前它点亮在每个数字上。有什么问题?

感谢您的宝贵时间。

这是通过位掩码完成的。如果你想检查 a 的第 i 位是否为 1,你将执行如下操作:

if (a & (1 << i))
{
    // Do something
}

这样 a 除了第 i 位之外的所有位都将 AND 与零相结合,从而得到零值.第 i 位将 AND1 运算,因此不会更改其值。因此,如果位不为零,if 条件将为真,否则为假。
您提供的比较代码也应该有效,但我怀疑 dot 变量不包含您认为它包含的值。 uint8_t dot=0101; 使其等于 八进制 基数中的 101(由于前导零)或十进制中的 65。不是二进制的 101