码迷,mamicode.com
首页 > 其他好文 > 详细

不使用(a+b)/2,求数平均值的方法

时间:2015-08-15 06:51:24      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:不使用(a+b)/2   求数平均值的方法   

不用(a+b)/2,求两数平均值

#include <stdio.h>

int main()

{

    int a = 10;

    int b = 20;

    int aver = a-(a-b)/2;//方法1

    int aver = (a&b)+((a^b)>>1);//方法2

    printf("%d\n",aver);

    return 0; 

}

方法1很容易理解,就不解释了。

方法2:avg=a&b+((a^b)<<)都为‘1‘的所

a&b取出a和b二进制中都为‘1‘的所有位,因为相同直接相加就可以了。

a^b,a和b中有一个为‘1‘的所有位,一部分是a为‘1‘,b为‘0‘,另

一部分是为‘1‘,a为‘0‘,两部分加起来除以2,然后和前面的相加就可以了。

不使用(a+b)/2,求数平均值的方法

标签:不使用(a+b)/2   求数平均值的方法   

原文地址:http://07282.blog.51cto.com/10617067/1684783

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!