首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在保留其他比特的同时交换4位?

在保留其他比特的同时交换4位?
EN

Stack Overflow用户
提问于 2013-09-21 18:46:08
回答 1查看 852关注 0票数 0

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

给出一个8位的位数x 76543210,用4交换2,用5交换3。但是,你也必须保留数字7,6,1和0。

下面是我正在做的事情的伪代码(这可能比我实际需要做的要复杂得多;我是位操作的新手)

代码语言:javascript
复制
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位数归零,然后做(原始数字)或交换,但这似乎很麻烦。

谢谢你在这方面的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-21 18:53:54

当您分配temp1和temp2的值时,只有您想要的位(正如您已经使用的和运算符一样)。

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

您需要做的是复制原始值(如果不想丢失它),删除正在修改的值(交换),并将temp1和temp2与OR运算符放在一起。

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

代码语言:javascript
复制
temp3 = (origianl number) AND ~(mask1 OR mask2)

~是否定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18936268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档