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