![](/img/trans.png)
[英]How to convert a 32 bit signed integer value to 64 bit signed integer equivalent in C
[英]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.