所以我正在尝试解决这个问题:
给定一个随机的 32 位正整数,你要做的就是将第 3、4、5 位的值与第 24、25、26 位的位值交换。
假设这是一个您不需要明确解决方案的问题,这里有一个提示:使用以下命令屏蔽有问题的位&
,做一个转变,然后OR
然后在使用按位|
.
您可以使用以下命令“剪掉”第 3、4 和 5 位:0x00000034
掩码和位 24、25 和 26 使用0x07000000
mask.
看看这个solution http://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel以位反转问题为灵感。
EDIT :(回应“不是作业”评论)由于这不是作业,这里有一个更深入的解释:
unsigned int val = ... // your value
unsigned int bits_03_04_05 = val & 0x00000034;
unsigned int bits_24_25_26 = val & 0x07000000;
// Cut out "holes" at bits 3, 4, 5, 24, 25, and 26 of the original value
unsigned int res = val & ~(0x00000034 | 0x07000000);
// Put bits 3, 4, and 5 in place
res |= bits_03_04_05 << 21;
// Put bits 23, 24, and 25 in place
res |= bits_24_25_26 >> 21;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)