求两个整型数的平均数

Posted 行走的段子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求两个整型数的平均数相关的知识,希望对你有一定的参考价值。

求两个整型平均数,简单吧!简单吗?

入门级:加、除

简单!

int getAverage(int input1, int input2) {

    int average = (input1 + input2) / 2;

    return average;

}

这样一个求平均数的方法拿去做大学编程题基本够用了,但是,还不够美!

进阶级:加、位

我们知道,2的指数级的乘、除运算,实质是在做移位运算,所以我们可以试着把除2变成右移1位,于是有:

int getAverage(int input1, int input2) {

    int average = (input1 + input2) >> 1;

    return average;

}

用上位操作瞬间就感觉逼格高了有没有,哈哈,不过别高兴的太早,这个方法处理“正常” 的int数没有问题,但当input1+input2的值溢出时(<Integer.MIN_VALUE or >Integer.MAX_VALUE),就处理不了了,但是如果我们能确定input始终不为负(比如数组下标),我们可以用无符号右移(>>>)代替有符号右移(>>),而且这样可以避免掉input之和溢出的问题,因为无符号右移只会在左侧空位补0。综上所述,当确定input必为非负时,我们有如下比较强壮的实现:

int getAverage(int input1, int input2) {

    int average = (input1 + input2) >>> 1;

    return average;

}

高级:位、加

讲到这里你可能会问,难道没有一种完美的方法解决上面说的input和为负数或溢出的问题吗?答案是,有!请看:

int getAverage(int input1, int input2) {

    int average = (input1 & input2) + ((input1 ^ input2) >> 1);

    return average;

}

可以看到,虽然计算公式变复杂了,但是健壮性得到了质的提升!

以上是关于求两个整型数的平均数的主要内容,如果未能解决你的问题,请参考以下文章

const 关键字

在C语言中,怎样判断两个整型的数相等

用变a给出下面的定义

4.数据类型分类:

JSK-390 计负均正入门

C语言求两个整型数据的“&”运算结果,打印输出运算结果的二进制位模式。