gpt4 book ai didi

c - 有没有一种有效的方法可以对 64 位数字的高 32 位部分和低 32 位部分分别进行 32 位按位旋转?

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:05 27 4
gpt4 key购买 nike

我目前正在使用 C/C++,并且我有一个 uint64_t。我需要分别对前 32 位和后 32 位进行按位旋转。例如,如果我的输入是

|                                     | |                                     |
0000 0000 0000 0000 0000 0000 0000 1101 0000 0000 0000 0000 0000 0000 0000 0111

我需要向右循环2位,正确的输出是

|                                     | |                                     |
0100 0000 0000 0000 0000 0000 0000 0011 1100 0000 0000 0000 0000 0000 0000 0001

最明显的方法是制作一个临时的 32 位数字并分别对其进行旋转操作,但是有没有不同的、有效的方法来做到这一点?

最佳答案

您可以在 2 种模式下使用相同的内存 - 作为 uint_64_t,以及 array[2] of uint32_t。最简单透明的方法 - 使用 union :

union U {
uint64_t u64;
uint32_t u32[2];
};

此后,只需使用该 union 的字段:

#define ROL(x, n) x = (x << n) | (x >> (32 - n))

U val;
val.u64 = input_val; // Assign 64_bit value to union val
ROL(val.u32[0], 3); // Rotate left by 3 low-part of long int
ROL(val.u32[1], 1); // Rotate left by 1 high-part of long int

关于c - 有没有一种有效的方法可以对 64 位数字的高 32 位部分和低 32 位部分分别进行 32 位按位旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28554358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com