Vulkan

Cracking The Coding Interview 5.6

//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).
#include <iostream>
#include <vector>
using namespace std;
int getNum1(int N)
{
	int num=0;
	for (int i=0; i<32; i++)
	{
		int t = N&1;
		if (t == 1)
		{
			num ++;
		}
		N = N>>1;
	}
	return num;
}

void print(int p)  
{
	vector<int> v;
	for (int k = 0;k<32; k++)  
	{  
		int t = p&1;  
		v.push_back(t);  
		p=p>>1;  
	}  
	for (int i = v.size()-1;i>-1; i--)  
	{  
		cout<<v[i]<<" ";  
	}  
	cout<<endl;
}

int getDiff(int a, int b)
{
	return getNum1(a^b);
}
int swap(int a)
{
	int aa = a;
	int j = aa & 0x55555555;
	int o = ((aa>>1) & 0x55555555);
	return (j<<1)|(o);
}
int main()
{
	/*int a = 8;
	int b = 6;
	print(a);
	print(b);*/
	//cout<<getDiff(a,b)<<endl;
	int k = 111;
	print(k);
	print(swap(k));
	return 0;
}

posted on 2014-04-18 12:59  Vulkan  阅读(150)  评论(0编辑  收藏  举报

导航