标签(空格分隔): 位运算
一篇总结的比较好的文章:
位运算技巧
求两个数的平均数
int overage(int x, int y)
{
return x&y + ((x^y)>>1;
}
判断一个数是否是2^N次方
!(X&(X-1))
同时这个表达式也可以求X中的1bit位的个数
int count =0;
while (x) {
++count;
x&=x-1;
}
return count;
再次变身的是可以得到一个数中最低1bit位
x & ~(x - 1)
加法器
int Add(int a, int b)
{
if (b==0) {
return a;
}
int sum,carry;
sum = a^b; //没有进位的加法
carry = (a&b) << 1; //完成第二步进位并且左移运算
return Add(sum, carry);//进行递归
}
a,b交换
void swap(int &a, int &b)
{
a=a^b;
b=a^b;
a=a^b;
}
判断一个数是否是奇数
if ( x&0x1 )
求一个数组中的只出现一次的数各种变种
这个问题多次出现,现在出现的变形就是一个数组中两个不重复的数字,甚至是三个不重复的数字,都有相应的解题技巧,剑指offer里面都有讲解下面贴出连接:
数组中只出现一次的数字
数组中三个只出现一次的数字
小米2013校园招聘笔试题