C++ 位操纵
我在玩比特游戏,试图对它有一个合理的理解,我遇到了这个问题。我正在将字符中的第六位设置为1,并试图找出它是否真的被设置为1。它给了我一个错误的答案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
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;