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

时间:2015-03-07 04:52:17

标签: c 64-bit

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标志,由于换档操作,它的值非常大。 我希望这更清楚一点。

1 个答案:

答案 0 :(得分:2)

假设您的意思是在没有符号扩展的情况下进行直接按位替换,那么我认为您要替换

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