飘飞的海

 

(x&y)+((x^y)>>1)

很不错的思路,虽然不算高效,但如果在汇编中的话,这种方法可以不产生高位溢出。

大概思路应该是这样:

(x&y)+((x^y)>>1),把x和y里对应的每一位(指二进制位)都分成三类,每一类分别计算平均值,最后汇总。

1、是x,y对应位都是1,用x&y计算其平均值;

2、是x,y中对应位有且只有一位是1,用(x^y)相当于计算机这些位的和,>>1相当于除2;

3、是x,y中对应位均为0,无须计算。

posted on 2012-10-01 16:55  飘飞的海  阅读(884)  评论(0编辑  收藏  举报

导航