现在,我有
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);
并且它们都不起作用
谁能告诉我如何解决这个问题?提前致谢!
期望这个表达式是一个常见的错误:
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;