求两个int类型的数的平均值?(返回值也是int)

来源:互联网 发布:2017年阳春市网络问政 编辑:程序博客网 时间:2024/06/05 09:16
1: 通常情况我们会这样写:
int avg(int a, int b){
return (a+b)/2;
}

为什么我们很少考虑到类型溢出呢?a+b有可能大于int的范围啊?

有人说,讲int类型转化为float,显然不科学,效率会下降。

2:正确的做法:

int avg(int a, int b)
{
//如果是一正一负
    if ((a < 0) != (b < 0))
        return (a + b) / 2;
    else
        return a + (b - a) / 2; //如果两个符号相同
}

下面是测试结果,超过数据类型的最大范围,然后计算结果就出问题了。


0 0
原创粉丝点击