(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,无须计算。
很不错的思路,虽然不算高效,但如果在汇编中的话,这种方法可以不产生高位溢出。
大概思路应该是这样:
(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,无须计算。