灵台县住房和城乡建设局网站,200做网站,温岭建设规划局网站,手机网站 o2o日子是一天天地走#xff0c;书要一页页地读。 ——毕淑敏 算法 位操作符的合理使用来解决问题1、题目大概2、理解和想办法解决3、结果 位操作符的合理使用来解决问题
1、题目大概
题目要求让我们把一个数字用二进制表示出来的时候#xff0c;将他的奇数位置和偶数位置交换…日子是一天天地走书要一页页地读。 ——毕淑敏 算法 位操作符的合理使用来解决问题1、题目大概2、理解和想办法解决3、结果 位操作符的合理使用来解决问题
1、题目大概
题目要求让我们把一个数字用二进制表示出来的时候将他的奇数位置和偶数位置交换就比方说 num2(0b10)交换过之后是1(0b01) 这种方式。 这里是题目的链接
2、理解和想办法解决
对于这种方式的题目其实我之前关于怎么让一个数知道他的二进制位有多少1或者是0一样(虽然这又是可以讲一大堆关于这个题目的如果后期有空我会把这题也单独开一个文章)。在我的心里我觉得有一种方法就是通过位操作符来解决因为关于二进制位的底层存储的方式大部分还都是通过这些方法来解决。 那么就应该思考究竟什么样子才能使得偶数位置和奇数位置两个交换呢首先根据题目我们知道数据的最大是在2的30次方-1那么其实也就是意味着这个最大的数也是能够左移两次那么奇数位置左移偶数位置向右移(因为偶数最小是在第二位能够向右移但是奇数最小是在第一位只能向左移)。 其实现在的问题是怎么能够单纯的得到奇数位置和偶数位置的二进制数 这个时候位操作符在4个之中该怎么选择呢 还有一个是按位取反。当然这题里面按位取反应该也是没什么用的。 记住对于提取来说(按位与)是最好的因为可以控制让原来的数什么位置留下什么位置不留下。(按位与)的作用是在两个数中有0的则为0只有相同为1的时候才为1。 所以想要留下偶数和奇数位置的数只需要 int a0b10101010101010101010101010101010;int b0b01010101010101010101010101010101;再分别去上num这个数得到的两个数就会是分别的奇数和偶数的位置。奇数 一位偶数一位将再次得到的数通过按位或来结合。按位或有1则为1相同为0才为0这样就能结合出来奇数位置和偶数位置相互调换的数。
3、结果 这样也就算是合理的通过了这道使用位操作符的算法题。