我正在尝试执行以下操作.但是我不确定我哪里会出错
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?
问题是您没有移位64位常量:1是类型的常量,int在您的平台上小于64位(可能是32位;它是实现定义的).
您可以通过UINT64_C在常量周围使用宏来解决此问题:
uint64_t x = (UINT64_C(1) << 46);
Run Code Online (Sandbox Code Playgroud)