关于求取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));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值