例子:

qint32 si32 = -1; // that gives us 0xFFFFFFFF
quint64 ui64 = si32; // that gives us 0xFFFFFFFFFFFFFFFF, that is expected

想要的结果:
0xFFFFFFFF00000000

当我尝试像这样在 si32 上移动位时
quint64 ui64 = si32 << 32;

编译器警告我关于位移溢出。

这应该是一项简单的任务,但我不知道如何做到这一点。
那是一个 unix C++ 代码(使用 QT,但这并不重要,普通的 unix C++ 代码就可以)。

我很感激你的帮助。

最佳答案

警告与 si32 本身的大小有关。基本上步骤顺序如下所示:

  • si32(32 位值)
  • 将该值移动 32 位(即将 32 位值移动 32 位)
  • 将其分配给 ui64

  • 要解决此问题,您可以先将 si32 转换为正确的 64 位类型,然后再将其移位 32 位,以便位移位对 64 位值进行操作:
    quint64 ui64 = ((quint64) si32) << 32;
    

    关于c++ - 如何将 32 位有符号整数放入 64 位无符号整数的高 32 位?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37701863/

    10-11 16:04