不用(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,然后和前面的相加就可以了。
时间: 2024-12-28 08:36:57