如何在 C 中将 2 个带符号的 32 位数字转换为 64 位数字

How to convert 2 signed 32 bit numbers to 64 bit in C

a和b是同一个数的上半部分和下半部分。现在我必须将这个数字保存到 64 位寄存器中。 假设 a = -1(高字节)和 b = -50。 我怎样才能做到这一点 ?

我正在使用以下适用于正数的方法。

int64_t c = (a);
c = (c<<32);
c+=b;

以上不适用于 -ve 个数字。如何做到这一点?

编辑: 上面的 -ve 数字代码为 -50 提供了一个非常大的值。基本上这意味着在操作之后 "c" 的值应该是 -50,但它应该是 64 位。作为上半部分,即 "a" 是 -1 并充当有符号位。下半部分有一个 -ve 符号,由于移位操作,它的值非常大。 我希望这更清楚一点。

假设你的意思是直接按位替换而不带符号扩展,那么我想你想替换

c += b;

在您的代码中使用

c |= (uint32_t)b; 

对于 a = -1 和 b = -50,这将使 c = 0xffff.ffff.ffff.ffce

对于 a = -1 和 b = 50,这将使 c = 0xffff.ffff.0000.0032

对于 a = 1 和 b = -50,这将使 c = 0x0000。0001.ffff.ffce

对于 a = 1 和 b = 50,这将使 c = 0x0000.0001.0000.0032