我只是在玩一些按位操作符来刷新自己的工作方式。我发现了一些非常奇怪的东西,但也许这只是对按位运算符如何工作的一个基本误解。
这个程序:
#include <iostream>
using namespace std;
int main() {
int base = 16;
cout << (base << 2) << endl;
cout << (base >> 2) << endl;
cout << (base & 0b0001) << endl;
return 0;
}
输出:
64
4
0
我预期的前两个,但最后一个的0
似乎有点奇怪(没有双关语意),正如我原本期望的那样1
。如果我base | 0b0001
,我会17
。似乎位模式被附加到末尾。是应该发生什么,或者我在这里遗漏了什么?
我正在使用G ++ v4.8.2。
答案 0 :(得分:4)
请注意base
为16
,即二进制为10000
。现在和它00001
一起看看发生了什么。
10000 & 00001 = 0
- &gt; 0 in any base
10000 | 00001 = 10001
- &gt; 17十进制