我想在程序中使用以下代码,但gcc不允许我将1移到31以外。
sizeof(long int)
显示8,这是否意味着我可以左移至63?
#include <iostream>
using namespace std;
int main(){
long int x;
x=(~0 & ~(1<<63));
cout<<x<<endl;
return 0;
}
编译输出以下警告:
left shift `count >= width` of type [enabled by default] `x=(~0 & ~(1<<63))`;
^
输出为-1。如果我左移了31位,则会得到2147483647的整数预期值。
我期望除MSB之外的所有位都打开,从而显示数据类型可以容纳的最大值。
尽管您x
的类型是long int
,但1
不是。1
是int
,因此1<<63
确实是未定义的。
试试看(static_cast<long int>(1) << 63)
,或1L << 63
按照Wojtek的建议。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句