题目描述
请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)
给定一个int x,请返回交换后的数int。
- 测试样例:10
- 返回:5
思路:位操作,考虑先将所有的奇数位右移一位,将所有的偶数位左移一位,再将两个数合并。使用0x10101010作为掩码,提取出奇数位,然后右移一位,使用0x01010101作为掩码,提取出偶数位,然后左移一位,将两数合并为一个数(因为前面提取出奇数位时,偶数位为置0,提取偶数位时,奇数位置0,所以使用或运算)
class Exchange {
public:
int exchangeOddEven(int x) {
return (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
}
};
本文介绍了一种高效的算法,用于交换整数中二进制的奇数位和偶数位。通过使用位操作,该算法能够快速实现位的交换,并提供了一个具体的C++实现示例。
936

被折叠的 条评论
为什么被折叠?



