Q:Write a program to swap odd and even bits in an integer with as few instructions as possible (e.g., bit 0 and bit 1 are swapped, bit 2 and bit 3 are swapped, etc).
A:将奇数位和偶数位提取出来,再移位取或就可以了
#include <iostream>
#include <vector>
using namespace std;
void print_binary(int n) {
vector<int> bit;
int m = 1;
int len = 8*sizeof(int);
while(len--) {
if (n&m) bit.push_back(1);
else bit.push_back(0);
m <<= 1;
}
while (!bit.empty()) {
cout<<bit.back();
bit.pop_back();
}
cout<<endl;
}
int swap_bits(int x){
return ((x & 0x55555555) << 1) | ((x >> 1) & 0x55555555);
}
int main() {
int a = 1234;
int b = -1234;
print_binary(a);
print_binary(swap_bits(a));
print_binary(b);
print_binary(swap_bits(b));
return 0;
}