gpt4 book ai didi

bit - 反转整数 x 中的位

转载 作者:行者123 更新时间:2023-12-05 09:24:57 26 4
gpt4 key购买 nike

位反转

我发现这段代码用于反转整数 x 中的位(假设一个 32 位值):

unsigned int
reverse(register unsigned int x)
{
x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2));
x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4));
x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8));
return((x >> 16) | (x << 16));
}

我无法理解此代码背后的逻辑/算法。所有魔数(Magic Number)的目的是什么?

最佳答案

让我们看看它是如何处理 8 位值的:

函数中的第一行每隔一个位并将其向左或向右移动:

12345678  -->  1-3-5-7-  -->  -1-3-5-7  -->  21436587
-2-4-6-8 2-4-6-8-

第二行以两位为一组,向左或向右移动:

21436587  -->  21--65--  -->  --21--65  -->  43218765
--43--87 43--87--

第三行以四位为一组,向左或向右移动:

43218765  -->  4321----  -->  ----4321  -->  87654321
----8765 8765----

现在位被颠倒了。对于 32 位值,您还需要两个步骤来移动 8 位和 16 位的位。

关于bit - 反转整数 x 中的位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7467997/

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