我想在我的程序中使用以下代码,但是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;
}
Run Code Online (Sandbox Code Playgroud)
编译输出以下警告:
left shift `count >= width` of type [enabled by default] `x=(~0 & ~(1<<63))`;
^
Run Code Online (Sandbox Code Playgroud)
输出为-1.如果我离开31位,我得到2147483647正如预期的那样.
我希望除了MSB之外的所有位都打开,从而显示数据类型可以容纳的最大值.
虽然你x的类型long int,但1不是.1是一个int,所以1<<63确实是未定义的.
尝试(static_cast<long int>(1) << 63),或1L << 63按照Wojtek的建议.