按位AND / OR运算符是否正在追加?

时间:2014-11-20 22:56:56

标签: c++ bit-manipulation

我只是在玩一些按位操作符来刷新自己的工作方式。我发现了一些非常奇怪的东西,但也许这只是对按位运算符如何工作的一个基本误解。

这个程序:

#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。

1 个答案:

答案 0 :(得分:4)

请注意base16,即二进制为10000。现在和它00001一起看看发生了什么。

10000 & 00001 = 0 - &gt; 0 in any base

10000 | 00001 = 10001 - &gt; 17十进制