代码段如下:
int f(int x, int y) {
return (x&y)+((x^y)>>1);
}
二进制数由0,1表示。x和y转换为二进制后,位对应可能有三种形式:分别是1和1对应,1和0对应,0和0对应。因此求平均值也可分成这三种对应情形讨论,然后求和。
1.1和1对应的部分,平均值就是x&y
2.0和0对应的部分,平均值为0
3.1和0对应的部分,平均值是(x^y)>>1
三部分汇总为x&y+((x^y)>>1)
与此类似,利用位运算求两个整数的加法可用如下代码实现:
int add(int x, int y) {
return (x^y)+((x&y)<<1);
}