bit manipulation

bit manipulation

本文关键字:manipulation bit      更新时间:2023-10-16

我正在玩一些东西,试图对它有一个合理的理解,我遇到了这个问题。我将字符中的第六位设置为 1,我试图找出它是否实际上设置为 1。它给了我一个错误的答案。

int main(int argc, char** argv) { 
    unsigned char a=0;
    a=a | (1<<6);
    int b=a &(1<<6);
    cout<< b;
    return 0;
}

它给我的结果是 64 而不是 1。为什么?

这确实是正确的和预期的行为。

检查是否设置了位n的方法如下:

return (value & (1U << n)) == (1U << n);

&执行 AND,因此11111111 & 01000000 01000000

您可以使用:

int b = (a >> 6) & 1;

如果设置了第六位,则将b == 1,如果未设置,则将0

程序的预期输出为 64,因为64&64为 64。 由于非零值在if表达式和条件运算符(&&||(中被解释为true,这对于很多情况来说已经足够了:

a |= (1<<6);
if (a & (1<<6))
{
    /* this code would get executed */
}

如果您对变量中有 64 感到困扰,请尝试如下操作:

bool b = (a & (1<<6)) ? true : false;

我不确定这里是否需要三元运算符,但很清楚发生了什么。

或者你可以这样做:

bool b = a >> 6 & 1;