使用unit64_t左移 - 发出警告

Raj*_*war 2 c++

我正在尝试执行以下操作.但是我不确定我哪里会出错

uint64_t x = (1 << 46); 
std::cout << x;
Run Code Online (Sandbox Code Playgroud)

我明白了

-warning:左移计数> =类型的宽度[-Wshift-count-overflow]

我得到输出0.我期待像这样的二进制的十进制输出

1 0000........00 (46 0s) 
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么我会收到这个警告?不是uint64_t 64位?为什么我得到输出0?

das*_*ght 6

问题是您没有移位64位常量:1是类型的常量,int在您的平台上小于64位(可能是32位;它是实现定义的).

您可以通过UINT64_C在常量周围使用宏来解决此问题:

uint64_t x = (UINT64_C(1) << 46); 
Run Code Online (Sandbox Code Playgroud)

  • 或者你可以使用类型后缀装饰常量:1ull. (4认同)