Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 位操纵_C++ - Fatal编程技术网

C++ 位操纵

C++ 位操纵,c++,C++,我在玩比特游戏,试图对它有一个合理的理解,我遇到了这个问题。我正在将字符中的第六位设置为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; } intmain(intargc,char**argv

我在玩比特游戏,试图对它有一个合理的理解,我遇到了这个问题。我正在将字符中的第六位设置为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;
}
intmain(intargc,char**argv){
无符号字符a=0;

a=a |(1这确实是正确的和预期的行为

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

return (value & (1U << n)) == (1U << n);
bool b = (a & (1<<6)) ? true : false;
返回值&(1U您可以使用:

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

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

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

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

为什么它会给你1?在你看来,你认为
&
有什么作用?你做错了。2^6=64
bool b = a >> 6 & 1;