1

我正在尝试检查字节变量中的最后 2 位是否已设置为 1。这就是我所拥有的:

if ((my_byte & (1 << 0)) == 1 && (my_byte & (1 << 1)) == 1)

但是,如果它似乎不起作用,因为代码没有进入 if 语句。我确定 my_byte 的值为 3。

有谁知道我做错了什么?

谢谢您的帮助。

4

2 回答 2

4

利用'if ((my_byte & 0b11) == 0b11)'

即,您将数字与最后两个位都设置为 1 的数字进行与运算。当且仅当 m_byte 将其最后两个位设置为 1 时,表达式才会为真。

于 2013-05-31T11:42:57.553 回答
2

如果设置了该位,则第二条or语句的值2是:

if ((my_byte & (1 << 0)) == 1 && (my_byte & (1 << 1)) == 2)

正如@johnchecn902 建议的那样,如果将其写为(my_byte & (1 << 1)) == 0b10.

也没有必要将其分为两个步骤。整个表达式可以简化为

if ((my_byte & 0b11) == 0b11)
于 2013-05-31T11:40:48.323 回答