如何在没有警告的情况下设置很长的数字?

时间:2017-12-27 19:54:45

标签: c++ initialization overflow warnings long-long

现在,我有

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

并且它们都不起作用

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

1 个答案:

答案 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;