我如何在没有警告的情况下将 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;
现在,我有
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;