-1

现在,我有

long long x = 1 << 60;
cout << x << endl;

而且我知道 long long 的范围可以一直到2^64,但是由于某种原因,当我执行这段代码时,它给了我一个警告,上面写着“ left shift count >= width of type [-Wshift-count-overflow].

另外,0是打印到屏幕上,这显然不是我想要的。

我试着在它后面加上文字“ll”,但我不知道应该把它放在哪里:

long long x = (1 << 60)ll;
long long x = (1 << 60ll);

他们都没有工作

谁能告诉我如何解决这个问题?提前致谢!

4

1 回答 1

3

期望这个表达式是一个常见的错误:

long long x = 1 << 60;

这种类型的左侧会影响右侧的计算。不是,1 << 60转换为左边类型的结果,但不影响1 << 60自身的计算。所以正确的解决方案是改变类型1

long long x = static_cast<long long >( 1 ) << 60;

或者

long long x = 1LL << 60;

甚至

auto x = 1LL << 60;
于 2017-12-27T20:04:15.710 回答