题目:
配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。
示例1:
输入:num = 2(或者0b10) 输出 1 (或者 0b01)
示例2:
输入:num = 3 输出:3
提示:
num
的范围在[0, 2^30 - 1]之间,不会发生整数溢出。
思路:
- 首先我们需要把奇数位和偶数位提取出来。我们可以使用二进制数101010....和010101....提取。这几个二进制数换成16进制会发生什么呢?答案刚好是0xaaaaaaaa,0x55555555。
- 将提取到的奇数位右移1位,偶数位左移一位。再将它俩相或,即得出答案。
C代码:(有史以来行数最少的题哈哈)
int exchangeBits(int num) {
int odd_num = num & 0xaaaaaaaa;
int even_num = num & 0x55555555;
return (odd_num >> 1) | (even_num << 1);
}
标签:偶数,面试题,奇数,int,交换,示例,28,力扣,num
From: https://blog.csdn.net/chamao_/article/details/144183468