Pal*_*han 2 c bit-manipulation bitwise-operators
如果我有一个uint64_t original和两个常规的四字节整数(有符号),我想将值存储在两个整数中,然后恢复无符号的64字节.这应该是可能的,因为在这两种情况下我们都有64位可用.我正在思考以下问题:
uint64_t test = 1350640807215539000;
int a = test >> 32; //get top 32 bits
int b = test & 0x00000000FFFFFFFF; //keep bottom 32 bits
uint64_t recover_test = ((a << 32) & b);
Run Code Online (Sandbox Code Playgroud)
但这并没有让我回到测试的原始价值......我做错了什么?
你可以使用一个联合,而不是做很多容易出错的错误.
union
{
uint64_t u64;
int32_t s32[2];
} u;
u.u64 = 1350640807215539000ULL;
printf("a = %d\n", u.s32[0]);
printf("b = %d\n", u.s32[1]);
Run Code Online (Sandbox Code Playgroud)