失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > c语言用除法求平均数 论C语言两整数平均值的4种算法

c语言用除法求平均数 论C语言两整数平均值的4种算法

时间:2024-02-26 12:38:39

相关推荐

c语言用除法求平均数 论C语言两整数平均值的4种算法

小学数学中我们就学过一种简单的求解两个整数平均数的算法(a+b)/2,当然它同样适用于我们的C语言#include

#include

intmain(){

inta=10;

intb=20;

printf("%d\n",(a+b)/2);

system("pause");

return0;

}

但是这种方法有弊端,我们都知道int是4个字节也就是32个比特位如果a和b的数加起来超过×××所能容纳的数字,我们就无法得到a和b的平均值#include

#include

intmain(){

inta=2000000000;

intb=2000000000;

printf("%d\n",(a+b)/2);

system("pause");

return0;

}

如图我们并不能求出a和b的平均值;

2.所以我们在写代码过程中为了避免此类情况的发生,我们采用另一种方法a+(b-a)/2,这样,只要a和b不越界,他们的平均值就可以算出来

图解

用这种方法就不会导致上面的情况发生#include

#include

intmain(){

inta=2000000000;

intb=2000000004;

printf("%d\n",b+(a-b)/2);

system("pause");

return0;

}

3.可是如果考虑这个方法的效率的话,我觉得这个方法不太完美,在C语言中除法的算法是最复杂的,时间最长,所以我们应该用一种方法来替代这个除法,大家先看这个算式b+(a-b)>>1;

用2进制右移的方法我们避免了这个问题;

#include

#include

intmain(){

inta=2000000000;

intb=2000000004;

printf("%d\n",b+((a-b)>>1));

system("pause");

return0;

}

我们得出同样的答案,并且缩短了这个程序运行时间,使得代码效率提升。

4.当然我们提到了二进制向右移位来求解,是否还有其它方法来求解呢,最后一种方法:AVG=(a&b)+((a^b)>>1),很多人可能一眼看不懂这个代码,我们来详细图解一下

我们用代码进行验证:#include

#include

intmain(){

inta=2;

intb=10;

printf("%d\n",(a&b)+((a^b)>>1));

system("pause");

return0;

}

----------------------------------------------------------------------------------------------------------------------------------

总结:以上就是整数求平均数的四种算法,前三种慢慢递进,解决掉一些潜在bug或着提升计算效率,第四种效率也很高,但是不容易理解,大家还有什么求整数平均数的算法,欢迎在评论区留言

如果觉得《c语言用除法求平均数 论C语言两整数平均值的4种算法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。