ldjhust

工欲善其事 必先利其器

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2013年4月2日

摘要: 用位操作实现求两个数a和b的平均值,只需将两个数的相同位提取出来,再将不同的位加在一起除2(即右移一位),用表达式说明即为:((a & b) + (a ^ b) >> 1),用这样的方式计算两个数的平均值可以防止数据溢出。但是请记住用这个表达式算出的结果永远是不超过真实平均值的最大整数,即若真实结果是-5.5,则此表达式给出的结果是-6,若真实平均值是-5,则表达式的结果是-5。 现在解释一下这个表达式的原理,求两个数的平均值我们把这两个操作数分成二进制位相同的部分和二进制位不同的部分,例如a=5(0101),b=6(0110),他们相同的部分为a0=0100,b0=010 阅读全文
posted @ 2013-04-02 14:35 ldjhust 阅读(460) 评论(0) 推荐(0) 编辑