Kev*_*val 0 c++ operators bitwise-operators logical-operators
我试图使用逻辑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;
}
Run Code Online (Sandbox Code Playgroud)
实际产量:
flags = 0
Anding with 1
flags = 0
Anding with 2
flags = 0
Anding with 4
flags = 0
Run Code Online (Sandbox Code Playgroud)
预期产量:
flags = 0
Anding with 1
flags = 1
Anding with 2
flags = 3
Anding with 4
flags = 7
Run Code Online (Sandbox Code Playgroud)
请注意,我只需在程序中替换&,即可得到预期的输出.但是我想知道我在这里做错了什么?
这是一个常见的错误,按位和...人们假设a & b意味着"返回与...的所有位相a结合的所有位b...它不会.它意味着"返回在两者 中设置的位a 和 b ".
如果a为1,且b为2,则二进制表示为...... 01并且10没有共同的位!结果当然是0.
您需要使用的是按位或.a | b意思是"返回在设定的所有位两种 a 或 b.
如果a为1,且b为2,则二进制表示为01和10,因此结果为11或预期的3.
将这些操作视为设置操作" 交集 "和" 联合 ",而不是二进制操作" 和 "和" 或 " 可能有所帮助.
| 归档时间: |
|
| 查看次数: |
988 次 |
| 最近记录: |