关于求取a+b平均数的求取

计算两个数的平均数
【1】

int Avg_Num(int a, int  b)
{
	int num = 0;
	num = (b + a) / 2;
	return num;
}

【2】右移操作符 >>逻辑移位情况下
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0001
相当于除法,除以2

int Avg_Num(int a, int  b)
{
	return (a + b) >> 1;
	/*int num = 0;
	num = (b + a) / 2;
	return num;
	int num = 0;
	num = (b - a) / 2 + a;
	return num; */
}

一般而言,求取平均数都是用上述方法,因为有进位会造成溢出,下面我将介绍两种方法来求取平均数。
使用b-a除以2,将b多出a的那一部分平分,最后将(b-a)/2加到a 上,实现两个数对于平均数的求取。从而避免的溢出这个问题。

#include<stdio.h>
#include<stdlib.h>
int Avg_Num(int a, int  b)
{
	int num = 0;
	num = (b - a) / 2 + a;
	return num;
}
int main()
{
	int a, b;
	printf("请输入两个数字:\n");
	scanf_s("%d %d", &a, &b);
	printf("%d\n",Avg_Num(a, b));
	system("pause");
	return 0;
}

异或相当于将相等的数字置零,不等的数字相加,因为不会有两个1相加的情况,因此不会有进位,不相等的部分使用右移操作符相当于除以2,a&b相当于留下了相同的位数。两者相加相当于求取平均数。

int Avg_Num(int a, int  b)
{
	return ((a&b) + ((a^b) >> 1));
}

猜你喜欢

转载自blog.csdn.net/weixin_44936160/article/details/90585207
今日推荐