代码之家  ›  专栏  ›  技术社区  ›  Showyeab Ahmed

算术表达式开头的类型转换适用于什么?

  •  3
  • Showyeab Ahmed  · 技术社区  · 3 年前

    我不明白一个类型转换怎么会出现在二进制算术表达式的开头。它是同时对两个变量进行类型转换还是只对一个变量进行类型转换?

    #include <stdio.h>
    main()
    {
        int sum = 17, count = 5;
        double mean = (double) sum / count;
        printf("Value of mean : %f\n", mean );
    }
    

    (double) (sum / count) 或者仅仅 ((double) sum) / count ?

    2 回复  |  直到 3 年前
        1
  •  6
  •   John Kugelman Michael Hodel    3 年前

    ((double) sum) / count . 强制转换其中一个操作数是强制浮点除法的常见技巧。 int / int double / int 强制将第二个操作数强制为 double 以及,导致 double / double 它不会截断。

    请注意,如果将其解析为 (double) (sum / count) 会的 工作这仍然会执行整数除法,截断小数部分,然后 然后

    如有疑问,请咨询 cppreference.com operator precedence chart 显示C样式转换的优先级高于除法:

    operator precedence chart

        2
  •  2
  •   dbush    3 年前

    typecast运算符的优先级高于除法运算符。因此:

    (double) sum / count
    

    解析如下:

    ((double) sum) / count
    

    意思是 sum 是用打字机打出的吗 double . 那么,因为一个操作数 / 双重的 另一种是有类型的 int int 操作数被转换为 双重的 常用算术转换