关于C++中的左移运算符

Viv*_*mar -1 c++ shift

我对左移操作员有疑问,当我执行时 -

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

输出:2

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

产量:4

但是,我什么时候 -

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

产量:16

在最后一种情况下,输出不应该是8吗?为什么给16?

Ant*_*onH 8

int n=(1<<(1<<(1<<1));
=> int n=(1<<(1<<2));
=> int n=(1<<4); // which is to say, 2 to the power of 4
=> 1 -> 2 -> 4 -> 8 -> 16
Run Code Online (Sandbox Code Playgroud)

所以它应该显示16.


Eug*_*Sh. 5

由于1 << n = 2^n很容易评估:

(1<<(1<<(1<<1)) = 2^(2^(2^1)) = 2^4 = 16
Run Code Online (Sandbox Code Playgroud)
  • 这里x^y表示x提升到的功率y,而不是C++XOR运算符.