如果没有警告,我如何设置一个很长的数字?

问题描述 投票:-1回答:1

现在,我有

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

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

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

我尝试将文字“ll”放在它之后,但我不知道应该把它放在哪里:

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

并且它们都不起作用

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

c++ initialization overflow warnings long-long
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;
© www.soinside.com 2019 - 2024. All rights reserved.