1、既然它要求使用较少的指令,那就少点吧,直接一句到位
由于题目要求奇数位和偶数位交换,那么如果将原数左移(<<)一位,原数中的奇数位都将到相应的偶数位,至于其他不需要考虑的位全给置0;同理,将原数右移(>>)一位,原数中的偶数位都将到相应的奇数位,至于其他不需要考虑的位全给置0;最后将左移和右移的结果合并即是我们所求的答案。
class Solution {
public:
int exchangeBits(int num) {
return (num<<1)&0xaaaaaaaa|(num>>1)&0x55555555;
}
};
ps,这里的数据不会导致溢出。