我对左移操作员有疑问,当我执行时 -
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?
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.
由于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运算符.