例子:
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++代码也可以)。
我将感激你的帮助。
quint64 ui64 = ((quint64)si32) << 32;
这行代码是将一个signed int
类型的变量转换为unsigned long long
类型,并左移32位,赋值给ui64
这个变量。不清楚这段代码是否会引起错误。 - Niallquint64
进行移位操作。如果你用qint32
进行 32 位移位操作,那么就什么都不会剩下了。quint64 temp = si32; temp << 32
我认为是可以正常工作的。 - 463035818_is_not_a_numberint main()
样板可以节省 所有人 的时间——除了你自己当然,但再说一遍,你想要答案,这确保你没有忽略任何细节,同时你的示例是有效的代码。例如,你本来可以发现你的问题与 Qt 没有任何关系。 - DevSolar