在C ++中将1 << 2和1 << 3相加时的输出很奇怪

Ron*_*ard 8 c++ bit-manipulation

所以我只是尝试在C ++中进行一些操作。这是我尝试过的:

int a = 1<<2;
cout<<a;
Run Code Online (Sandbox Code Playgroud)

给出的输出为4

int a = 1<<3;
cout<<a;
Run Code Online (Sandbox Code Playgroud)

这给出的输出为 8

但是当我这样做时:

int a = 1<<2 + 1<<3;
cout<<a;
Run Code Online (Sandbox Code Playgroud)

给出的输出为64。为什么这样?

我也尝试过:

int a = 1<<2;
int b = 1<<3;
cout<<a + b;
Run Code Online (Sandbox Code Playgroud)

给出12预期的输出。

Dre*_*wen 7

这是因为加法运算符的优先级高于移位。换句话说,您的第二个示例等效于1 << (2 + 1) << 3

此外,由于移位是左关联的,因此与相同(1 << (2 + 1)) << 3。简化8 << 364


phu*_*clv 6

关于运算符优先级

+的优先级高于移位运算符,因此1<<2 + 1<<3完成作为1 << (2 + 1) << 3其类似于1 << 6 == 64(因为<<左结合,因为你可以在优先级表中上面的链接看到)

这也是cout<<a + b;起作用的原因,因为它被解析为cout<<(a + b);,否则您会遇到诸如“无法在流中添加数字”之类的错误。