
class Solution {
public:
int exchangeBits(int num) {
bitset<32>n(num);
for(int i=0;i<29;i+=2){//偶数位和奇数位交换
int t = n[i];
n[i] = n[i+1];
n[i+1] = t;
}
return n.to_ulong(); //转换成整数
}
};
题解2:
int -> 32位
奇数位全1 -> 0101… 表示为 0x55555555
偶数位全1 -> 1010… 表示为 0xaaaaaaaa
ans = (提取奇数位 << 1) + (提取偶数位 >> 1)
class Solution {
public:
int exchangeBits(int num) {
return ((num&0x55555555) <<1)+((num&0xaaaaaaaa) >>1);
}
};
本文对比了两种方法,一种是通过位操作逐位交换32位整数的奇偶位,另一种是利用位运算快速提取并组合奇偶位。讲解了如何使用`bitset`和位与运算符`&`来简化代码,提升交换效率。
&spm=1001.2101.3001.5002&articleId=121588377&d=1&t=3&u=721c2354489443d58588d9703f898621)
953

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



