计算二进制中1的个数
int CountOf1(int num)
{
int count=0;
while(num)
{
++count;
num&=(num-1);
}
return count;
}
判断一个数是不是2的正整数次幂
bool IsPowerOf2(int n)
{
return (n>1&&((n&(n-1))==0));
}
//假设一个数组只有一个数出现了一次,其他数出现都出现了两次,如何快速找出这个数。
//这里用到了异或的性质。1、任何数和它本身异或,结果为0。 2、任何数和0异或,结果是它本身。
int FindAppearOnceNumber(int* array,int nLength)
{
int result=0;
for(int i=0;i<nLength;++i)
result^=array[i];
return result;
}
//类似的一种问法,给你一个由n-1个数组成的未排序的序列,其元素都是从1到n的不同的整数,找出序列中缺失的数
//一种解法是,求出n-1个数的和sum,然后n(n+1)/2-sum。但是当n很大的时,加法操作可能会溢出。
int FindLostNumber(int* array,int n)
{
int result=0;
for(int i=1;i<=n;i++)
result^=i;
for(int i=0;i<n-1;i++)
result^=array[i];
return result;
}
//不使用第三方变量,交换两个变量的值
void swap(int&a,int& b)
{
a=a^b;
b=a^b;
a=a^b;
}
不使用算法运算符实现两个数相加
int AddNoArithm(int a,int b)
{
if(b==0)
return a;
int sum=a^b;
int carray=(a&b)<<1;
return AddNoArithm(sum,carray);
}
写一个函数将一个整形的奇偶位呼唤
int SwaoOddEvenBits(int num)
{
return (((num&0xaaaaaaaa)>>1)|((num&0x55555555)));
}
用位操作实现求两个数的平均数
int Average(int a,int b)
{
return ((a^b)>>1)+(a&b)
}