Arduino和Bitwise,意外的结果

时间:2011-06-21 11:03:50

标签: arduino

让我的自己在这里有点困惑。

我想测试一组位(3位)是否包含某个位置的位。

if (B110 & B010 == B010)

(B110是要检查的数字,B010我想看的位是否存在)

上面的代码没有给我预期的结果,B110都是真的,B101是真的。我很确定我需要使用&(和)来测试掩码B010。

我的理解是B110& B010等于B010和B101& B010等于B000。但我的if语句是用两个测试位运行的吗?

我正在使用Arduino进行编码,我确信这是对我的一个简单的误解,但不确定在哪里。

2 个答案:

答案 0 :(得分:12)

尝试if ((B110 & B010) == B010)

目前它以if (B110 & (B010 == B010))运行,这将永远是真的。

this table所示, == != 的优先级高于&amp; | < / em>等。

答案 1 :(得分:3)

此测试中实际上不需要“== B010”。在C中,0表示“false”,而任何非零值都被视为“true”。 B110 & B010(或该位设置的任何其他值)将返回B010,这不等于0,因此测试成功。