c语言中有一种算法取平均数法确定位置,求平均数的四种方法

用c语言求平均数有四种方法,各有利弊。

1.第一种是最常规的做法

例 > int main() { int a = 10; int b = 5; c = (a + b) / 2; system("pause"); return 0; }

这种方法有缺陷,如果a和b足够大,以致于两数之和超出了intmax(整型所能代表的最

大值),所以不建议使用这种方法。

2.最常用的方法

例 > int main() { int a = 10; int b = 5; c = a+(b-a)/2; system("pause"); return 0; }

这种优于第一种方法,这个算法c的值永远不会超过intmax,所以一般这种算法比较常见

3.用位操作表示

例 > int main() { int a = 10; int b = 5; c = (a&b) + (a^b)/2; system("pause"); return 0; }

a&b得到的是a和b的二进制里对应位相同的那一位,且为1,a^b得到的是a和b的二进制

里对应位不同的那一位留下来,且为1,相同位全部变成0。另外,a与b的和可以理解为

a与b的每个二进制位的权重之和,可以拆分成a和b相同二进制位的和加上不同二进制位

的和。所以a&b即为相同的二进制的对应位的和除以2,a^b即为不同的二进制的对应位

的和。这种算法的缺陷是a和b只能是整数。

4.也用位操作符表示

例 > int main() { int a = 10; int b = 5; c = (a&b) + ((a^b) >> 1); system("pause"); return 0; }

向右移有除以二的效果

第三种与第四种方法都较难理解透彻, 所以轻易不要尝试,但如果非要用的话,优先

用右移的方法,效率较高。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值