[原创]通过位运算符和移位运算符来算平均数
Java的位运算符包括:
与(&)、非(~)、或(|)、异或(^)
Java中有三种移位运算符:
<< : 左移运算符,num << 1,相当于num乘以2
>> : 右移运算符,num >> 1,相当于num除以2
>>> : 无符号右移,忽略符号位,空位都以0补齐
在《程序员面试宝典》第五版P41例3上,讲了一种利用位运算符和移位运算符来计算两个整数的平均数的方法:
int x; int y;
平均数等于:(x&y)+((x^y)>>1)
x&y 是取相同的位与,这个结果是x和y相同位的和的一半;
x^y 是取x和y的不同位,这个结果相当于x和y不同位的和,然后右移1位,相当于对这个和除以了2;
最后这两部分相加,就得到了x和y的平均数;