前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >寒假提升(5)[利用位操作符的算法题]

寒假提升(5)[利用位操作符的算法题]

作者头像
薛定谔方程难
发布2024-02-08 08:18:26
950
发布2024-02-08 08:18:26
举报
文章被收录于专栏:我的C语言我的C语言

日子是一天天地走,书要一页页地读。 ——毕淑敏

算法
  • 位操作符的合理使用来解决问题
    • 1、题目大概
    • 2、理解和想办法解决
    • 3、结果

位操作符的合理使用来解决问题

1、题目大概

题目要求让我们把一个数字用二进制表示出来的时候,将他的奇数位置和偶数位置交换,就比方说 num=2(0b10)交换过之后是1(0b01) 这种方式。 这里是题目的链接

2、理解和想办法解决

对于这种方式的题目,其实我之前关于怎么让一个数知道他的二进制位有多少1或者是0一样(虽然这又是可以讲一大堆关于这个题目的,如果后期有空,我会把这题也单独开一个文章)。在我的心里,我觉得有一种方法,就是通过位操作符来解决,因为关于二进制位的底层存储的方式,大部分还都是通过这些方法来解决。 那么,就应该思考,究竟什么样子才能使得偶数位置和奇数位置两个交换呢?首先,根据题目,我们知道数据的最大是在2的30次方-1,那么其实也就是意味着,这个最大的数也是能够左移两次,那么奇数位置左移,偶数位置向右移(因为偶数最小是在第二位,能够向右移,但是奇数最小是在第一位,只能向左移)。 其实现在的问题是,怎么能够单纯的得到奇数位置和偶数位置的二进制数? 这个时候,位操作符在4个之中该怎么选择呢?

还有一个是按位取反。当然,这题里面按位取反应该也是没什么用的。 记住对于提取来说&(按位与)是最好的,因为可以控制让原来的数什么位置留下,什么位置不留下。&(按位与)的作用是,在两个数中,有0的则为0,只有相同为1的时候才为1。 所以!想要留下偶数和奇数位置的数,只需要

代码语言:javascript
复制
 int a=0b10101010101010101010101010101010;
 int b=0b01010101010101010101010101010101;

再分别去&上num这个数,得到的两个数,就会是分别的奇数和偶数的位置。奇数 <<一位,偶数>>一位,将再次得到的数,通过按位或来结合。按位或:有1则为1,相同为0才为0,这样就能结合出来,奇数位置和偶数位置相互调换的数。

3、结果

这样也就算是,合理的通过了这道,使用位操作符的算法题。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算法
  • 位操作符的合理使用来解决问题
    • 1、题目大概
      • 2、理解和想办法解决
        • 3、结果
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档