繁体   English   中英

如何在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM