如何将大数分成两个较小的整数,然后重新组合大数?

how do I divide large number into two smaller integers and then reassemble the large number?

我试过下面的方法,但最后似乎没有得到正确的值: 我有一个可能大于 32 位的数字,因此我想将它存储到两个 32 位数组索引中。 我把它们分开了:

int[0] = lgval%(2^32);
int[1] = lgval/(2^32);

并重新组装我试过的 64 位值: CPU: PowerPC e500v2

lgval= ((uint64)int[0]) | (((uint64)int[1])>>32);

因为我们在大端,所以请注意向右移动。出于某种原因,我最后没有得到正确的值,为什么不呢?我在这里做错了什么?

^ 运算符是异或,不是幂。

你想要这样做的方式可能是:

uint32_t split[2];
uint64_t lgval;

/* ... */

split[0] = lgval & 0xffffffff;
split[1] = lgval >> 32;

/* code to operate on your 32-bit array elements goes here */

lgval = ((uint64_t)split[1] << 32) | (uint64_t)(split[0]);

正如 Raymond Chen 所说,字节顺序与存储有关。在这种情况下,如果您想将 split-32-bit-int 中的字节作为单个 64 位值访问,则只需考虑字节顺序。无论如何,这可能不是一个好主意。