x&x1的问题?

1. 判断一个整数是否是2的N次方?

bool foo(int n)
{
	if(n == 0) return true;
	if(n < 0) return false;
	return !(n&n-1);
}

2.统计一个整数的二进制中1的个数

int foo(int n)
{
	int nCount = 0;
	while(n)
	{
		nCount++;
		n = n&(n-1);
	}
	return nCount;
}

x&x-1表示把数字x对应的二进制的最右边的1变为0。


云腾软件
原文地址:https://www.cnblogs.com/yongqiangyue/p/3984796.html