c++ - 用 unit64_t 左移 - 发出警告

标签 c++

我正在尝试执行以下操作。但是我不确定我可能哪里出错了

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 位常量:1int 类型的常量,在您的平台上它小于 64 位(可能32 位;它是实现定义的)。

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

uint64_t x = (UINT64_C(1) << 46); 

关于c++ - 用 unit64_t 左移 - 发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52023223/

相关文章:

c++ - 查找所有子字符串的出现和位置

C++ 运算符 = 用于具有类成员函数的数组

c++ - C++ 标准是否要求 iostreams 性能不佳,或者我只是在处理一个糟糕的实现?

c++ - visual studio调试Qt,缺少msvcp140d_app.dll

c++ - CMake 标志卡住

c++ - 如何让 setw 应用于以下所有标准输出?

python - 如何使用 Python 在文本文件中读取和写入多个值?

c++ - 我应该将类放在 C++ 中的单独文件中吗?

c++ - 意外的 const 引用行为

c++ - 如何在 cmake 中使用 emscripten 端口(SDL2 和 Freetype)