现在,我有
long long x = 1 << 60;
cout << x << endl;
我知道long long的范围可以一直到2^64
,但出于某种原因,当我执行这段代码时,它会给我一个警告,说&#34; {{ 1}}&#34;
此外,屏幕上会显示left shift count >= width of type [-Wshift-count-overflow].
,这显然不是我想要的。
我试过把文字&#34; ll&#34;在它之后,但我不知道应该把它放在哪里:
0
并且它们都不起作用
有谁能告诉我如何解决这个问题?提前谢谢!
答案 0 :(得分: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;