前言
平均数:平均数是指在一组数据中所有数据之和再除以数据的个数。平均数是表示一组数据集中趋势的量数,它是反映数据集中趋势的一项指标。今天就简单讲解一下编程界平均数几种简要解法。
解法一:
这种方法最为简单,弊端是如果a和b非常大的话,a+b的值可能超过了整型的储存范围(最大值为2147483647),导致溢出,得到错误的结果。
- 参考代码
#include <stdio.h>
int main()
{
int a=10;
int b=20;
int avg=0;
avg=(a+b)/2;//平局值
//或者
avg=(a+b)>>1://右移表示除2,左移表示乘2。
//【-1除外】(右移一位为-1,左移一位为-2)
printf("%d\n",avg);
return 0;
}
解法二:
用一个较大值减去另一个较小值得到二者之差,将差除2后加上较小值即得到了二者平均值,可有效防止溢出的情况的出现。
步骤如图:
- 参考代码
#include <stdio.h>
int main()
{
int a=10;
int b=20;
int avg=0;
avg=b+(a-b)/2;//平均值
//或者
avg=b+(a-b)>>1://右移表示除2,左移表示乘2
//【-1除外】(右移一位为-1,左移一位为-2)
printf("%d\n",avg);
return 0;
}
方法三:
将两个数的二进制位分为相同部分和不同部分,利用按位与求出相同部分的平均数,然后再用按位异或求出不同部分的平均数,加起来就是两个数的平均数。
这里举个栗子:
- a = 10,b = 12;
- 10&12可得到 1000
- 10^12可得到 0110
- 计算a与b的平均值C语言表达式:*
avg = (a&b) + (a^b)>>1
参考代码
#include <stdio.h>
int main()
{
int a=10;
int b=20;
int avg=0;
avg = (a&b) + (a^b)>>1;
//或者
avg = (a&b) + (a^b)/2;
printf("%d\n",avg);
return 0;
}
结语
知识在于汇总,方法在于总结。
不忘初心,励志前行!
部分资料来源于网络,版权属其原著者所有,只供学习交流之用。如有侵犯您的权益,请联系【公众号:码农印象】删除,可在下方评论,亦可邮件至ysluckly.520@qq.com。互动交流时请遵守宽容、换位思考的原则。