求两个数的平均值三种方法

第一种

最常见的方法
两个数相加然后除以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));
	
}

你可能感兴趣的:(求两个数的平均值三种方法)