题目
配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。
示例1:
输入:num = 2(或者0b10) 输出 1 (或者 0b01)
示例2:
输入:num = 3 输出:3
解题
方法一:使用bitset
class Solution { public: int exchangeBits(int num) { bitset<32> tmp(num); for(int i=0;i<32;i+=2){ //交换tmp[i]和tmp[i+1] int t=tmp[i]; tmp[i]=tmp[i+1]; tmp[i+1]=t; } return (int)tmp.to_ulong(); } };
方法二:位运算(左移右移)
class Solution { public: int exchangeBits(int num) { return ((num&0x55555555)<<1)|((num&0xaaaaaaaa)>>1); } };