我正在尝试执行以下操作。但是我不确定我可能哪里出错了
uint64_t x = (1 << 46);
std::cout << x;
我明白了
-warning: left shift count >= width of type [-Wshift-count-overflow]
我得到输出 0。我期待像这样的二进制的十进制输出
1 0000........00 (46 0s)
我的问题是为什么我会收到此警告? uint64_t 不是 64 位的吗?还有为什么我得到输出 0 ?
最佳答案
问题是您没有移动 64 位常量:1
是 int
类型的常量,在您的平台上它小于 64 位(可能32 位;它是实现定义的)。
您可以通过围绕常量使用 UINT64_C
宏来解决此问题:
uint64_t x = (UINT64_C(1) << 46);
关于c++ - 用 unit64_t 左移 - 发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52023223/