0

我很难考虑如何交换给定 8 位数字的中间 4 个值,同时保留中间每一侧的 2 位。这是一个图表:

给定一个 8 位数字 |76543210|,将 2 与 4 交换,将 3 与 5 交换。但是,您还必须保留数字 7、6、1 和 0。

这是我目前正在做的伪代码(这可能比我实际需要做的要复杂得多;我是按位运算的新手)

mask1 = 00001100
mask2 = 00110000
temp1 = (original number) AND mask1 // Extract only the bits we care about swapping.
temp2 = (original number) AND mask2
temp1 << 2                          // Perform the swap of the inner four bits.
temp2 >> 2
swapped = temp1 OR temp2            // The final swapped number, but the outer digits
                                    //    haven't been preserved.

是否有我会使用的面具或其他东西来确保在轮班发生后外部数字得到恢复?

现在我在想我可能会将中间的 4 位数字归零,然后做(原始数字)或交换,但这似乎很老套。

感谢您对此的任何帮助!

4

1 回答 1

1

当您分配 temp1 和 temp2 的值时,只有您想要的位(因为您使用了 AND 运算符)。

但是您的解决方案中缺少一个步骤,您需要将其与原始值合并在一起。

你需要做的就是复制一个原始值(如果你不想丢失它),删除你正在修改的值(交换),然后用 OR 运算符将你的 temp1 和 temp2 放在那里。

如何从原始值中删除位?使用下面的技巧:

temp3 = (origianl number) AND ~(mask1 OR mask2)

~是否定的。

于 2013-09-21T18:53:54.183 回答