加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何将32位有符号整数放入64位无符号整数的高32位?

发布时间:2020-12-16 10:03:09 所属栏目:百科 来源:网络整理
导读:例: qint32 si32 = -1; // that gives us 0xFFFFFFFFquint64 ui64 = si32; // that gives us 0xFFFFFFFFFFFFFFFF,that is expected 期望的结果: 0xFFFFFFFF00000000 当我试图像这样在si32上移位时 quint64 ui64 = si32 32; 编译器警告我有关位移溢出的信息
例:

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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读