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

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

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

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

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部