二进制状态压缩基础

拜读了lyd的新书。对位运算这一节的某些技巧以10010为例自己实现了一下,记录于此,不足之处还请提出批评。

#include

int turnten(int n)//二进制转十进制
{
	return n==1?1:turnten(n/10)%10*2+n%10;
}
int turntwo(int n)//十进制转二进制 
{
	return n==1?1:turntwo(n/2)*10+(n&1);
}
int main()
{
	int n=10010;
	int m=turnten(n); 
	printf("%d\n",m);//18,注意以下操作要使用m去位运算,且都是从第0位算起的 
	
	//(n>>k)&1操作 
	for(int i=0;i<5;i++)//取出二进制的第i位
		printf("%d ",(m>>i)&1);//0 1 0 0 1
	
	//n&((1<0)
	{
		printf("%d ",h[m&-m]);
		m -= m&-m;
		//m&-m操作,等同于m&(~m+1),此处会输出1 4 
	} 
	 
	return 0;
}

你可能感兴趣的:(复习题,常用技巧)