我如何在没有警告的情况下将 long long 设置为巨大的数字?

How would I set a long long to a huge number without a warning?

现在,我有

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);

和 none 他们工作

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

预期此表达式是一个常见错误:

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;