繁体   English   中英

C ++逻辑与运算符

[英]C++ Logical AND Operator

我正在尝试使用逻辑AND运算符,但出现了一些意外行为。

#include <iostream>

using namespace std;

int main() {
  unsigned flags = 0;
  cout << "flags = " << flags << endl;
  for(int i=0; i<3; ++i) {
    flags &= (1 << i);
    cout << "Anding with " << (1 << i) << endl;
    cout << "flags = " << flags << endl;
  }
  return 0;
}

实际输出:

flags = 0
Anding with 1
flags = 0
Anding with 2
flags = 0
Anding with 4
flags = 0

预期产量:

flags = 0
Anding with 1
flags = 1
Anding with 2
flags = 3
Anding with 4
flags = 7

请注意,我可以通过在程序中简单地用&替换+来获得预期的输出。 但是我想知道我在这里做错了什么?

这是按位排列的常见错误,...人们认为a & b意思是“将a所有位与b所有位组合在一起……不然。这意味着”返回在两个位中设置的位a b ”。

如果a为1,b为2,则二进制表示形式为0110 ...没有共同点! 结果当然是0。

您需要使用按位 a | b a | b表示“返回了在任一组中的所有的位a b

如果a为1,b为2,则二进制表示形式为0110 ,因此结果为11或期望的3。

将这些操作视为集合操作“ 交集 ”和“ 联合 ”,而不是二进制操作“ ”和“ ”,可能会有所帮助。

你混了| & 您的预期结果对应于以下迭代:

 flags |= (1 << i);

|=的按位OR将“添加”位到您的位集flags ,而按位AND只能删除位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM