为什么(5 + 10)/ 2是7.0而不是7.5? C编程

问题描述 投票:2回答:1

c代码:

 int main(void) {
 int i = 0, j = 0;
 double avg = 0;
 int *pi, *pj;
 double *pavg;

..

    pi = &i;
    pj = &j;
    pavg = &avg;

..

    *pi = 5;
    *pj = 10; 
    *pavg = (*pi + *pj) / 2;

这里打印:

    printf("%lf\n\n", avg);

它打印7.000000000

    return 0;
}
c integer double average integer-arithmetic
1个回答
6
投票

(*pi + *pj) / 2表示整数运算。在分配给double变量之前,小数点后的数字已被舍弃。

一种方法是执行(*pi + *pj) / 2.0。表达式的操作数之一为双精度,其他int s将在计算表达式之前提升为double s。

另一种选择是将一个变量typecast设为双倍((double)*pi + *pj) / 2。在此,优先级较高的解引用运算符将​​在类型转换之前进行评估。

© www.soinside.com 2019 - 2024. All rights reserved.