每日一道编程题 --> 摘自于曾经百度的一道笔试题

题目要求:利用宏定义来完成一个整数二进制奇数偶数的互换

该类题目解题思路:  碰到题干含有二进制类字眼的题目一般都会利用到 ‘&’   ’|‘ ’<<'  '>>"这几个运算操作符,这几个操作符不用我在这里过多的介绍,想必大家都很熟悉它们了吧  (如有不知道的,欢迎在留言区评论,我会出一篇文章来对操作符章节进行一个详细的介绍,  ps:大神勿喷 OvO)

该题解题思路: 首先我们要知道一个数的二进制序列,在这里我就用 11 这个数字来进行讲解

先上图!!!!

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6Ium55qE6Ium6KGM5YOn,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6Ium55qE6Ium6KGM5YOn,size_14,color_FFFFFF,t_70,g_se,x_16

我们将右边的第一个数定为是奇数,所以从右边数的第二个就为偶数

完整步骤

步骤一:怎么取下奇数位 把偶数位置为0呢?  这时候我们可以用上 & 操作符 (相同为1 相异为0)  所以11的二进制跟十六进制0xaaaaaaaa相与就可以得到

步骤二:怎么取下偶数位 把奇数位置为0呢? 方法同上 

步骤三:左移  右移  

涉及的问题:我们该如何把一个二进制序列向左或者向右移动呢? 这时候就要利用到我们的 

文章开头提到的那些运算符了  ‘>>' ’<<‘ 操作符

交换过后的值为:7 


通过上图提出奇数位跟偶数位的操作后 你会发现 11这个数字原来的二进制序列居然等于分离后得到的这两个结果的和!  (置为0的部分其实也可以视为空)

结论:所以通过以上的分析 我们能知道 只要将奇数部分的二进制序列向右移动以为就能使所有的奇数位变成偶数位, 同样的将偶数位向左移动一位就能把所有偶数位变成奇数位。

分析问思路了以后那么以下就是我分享的代码实现过程


代码的具体实现:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6Ium55qE6Ium6KGM5YOn,size_15,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN6Ium55qE6Ium6KGM5YOn,size_20,color_FFFFFF,t_70,g_se,x_16

代码写完以后可以完美的运行起来。

好了,这就是今天所分享的一个小题目。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值