计算两个数的平均数
【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));
}