如何将 32 位有符号整数放入更高的 32 位 64 位无符号整数中
How to put 32-bit signed integer into higher 32 bits of 64-bit unsigned integer?
示例:
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++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- 在线程中读取无符号整数时,c++ 位是否以原子方式切换?
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 使用192/256位整数求和无符号64位整数向量的点积的最快方法
- 为什么对无符号字符进行算术运算会将它们提升为有符号整数
- 从 std::string 转换为 const 无符号整数
- 迭代器和无符号整数的重载 + 运算符
- 将最小值整数转换为无符号长整型
- C++,概念不适用于无符号整数作为结果类型?
- 双倍到无符号的整数/字符
- 将范围有限的浮点数转换为无符号的整数,以保持排序顺序和精度
- 依靠任何数字类型(无符号、整数等)的隐式提升来加倍是否安全
- 枚举到无符号的整数
- 你能把一个有符号的char数组转换成一个无符号的整数吗
- 如何将无符号字符数组转换为无符号短整数