如何将 32 位有符号整数放入更高的 32 位 64 位无符号整数中

How to put 32-bit signed integer into higher 32 bits of 64-bit unsigned integer?

本文关键字:无符号整数 整数 符号      更新时间:2023-10-16

示例:

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本身的大小有关。基本上,步骤顺序如下所示:

  1. si32(这是一个 32 位值)
  2. 将该值移位 32 位(即将 32 位
  3. 值移位 32 位)
  4. 将其分配给ui64

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

quint64 ui64 = ((quint64) si32) << 32;