第一种
最常见的方法
两个数相加然后除以2获得平均值。
int ave(int x, int y)
{
return (x + y) >> 1;
}
因为c语言中整数有存储范围,
有符号整形的范围为 -2147483648~+2147483647
无符号整形的范围为 0~4294967295
所以这种方法处理比较大的值的时候,会导致数值溢出。
第二种方法
用大数减去小数,然后将结果除以2,便可以获得这两个数的平均值
int ave2(int a, int b)
{
return a + (b - a) / 2;
}
这种方法可以防止数值溢出。所以建议使用这种方法
第三种
比较难理解的一种方法
利用位操作求两个数的平均值
int ave3(int a, int b)
{
return ((a&b) + ((a^b) >> 1));
}