我在考虑如何交换给定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位数字归零,然后做(原始数字)或交换,但这看起来像是hacky。
感谢您对此提供任何帮助!
答案 0 :(得分:1)
当您指定temp1和temp2的值时,只有您想要的位(因为您使用了AND运算符)。
但是您的解决方案中缺少一步,您需要将它们与原始值合并在一起。
您需要做的是复制原始值(如果您不想丢失它),删除您正在修改的值(交换),并使用OR运算符放置您的temp1和temp2。
如何从原始值中删除位?使用以下技巧:
temp3 = (origianl number) AND ~(mask1 OR mask2)
〜是否定。