c - F = (9/5 * C) + 32 和 F = (C *9/5) + 32 有什么区别?优先?

标签 c operators operator-precedence

<分区>

F = (C * 9/5 ) + 32 和 F = (9/5 * C) + 32 产生两个不同的结果,尽管 C 的输入相同。我意识到运营商有某种优先权,但我不确定。乘法在除法之前吗?

输入 20 在第一种情况下给出的华氏温度值为 68(正确值),在第二种情况下为 52。

#include<stdio.h>

int main()
{
    float cel , fahr ; 
    printf("Enter the temperature(C): ");
    scanf("%f",&cel);
    fahr = (9/5 * celt is  ) + 32;
    printf("\nThe temperature in fahranheit is %f ",fahr);

}

预期结果是 68,但上面代码的结果是 52。如果我切换“9/5”和“cel”的位置,它会给出正确的结果。这是为什么?

最佳答案

乘法和除法在 C 中具有相同的优先级,并且具有从左到右的结合性。所以,

  • F = (C * 9/5 ) + 32 等同于 F = ((C * 9)/5) + 32
  • F = (9/5 * C) + 32 等同于 F = ((9/5) * C) + 32

这两个表达式在代数上是等价的,除了 C 定义了 int/int = int,并丢弃了余数。所以,9/5 不是您预期的 1.8,而是 1。

要从两个 int 中得到浮点结果,您需要将至少一个操作数转换为 floatdouble。所以不要写9/5:

  • 9.0/5.09.0/59/5.01.8,这为您提供了加倍,或
  • 9.0f/5.0f9.0f/59/5.0f1.8f ,它给你一个 float

关于c - F = (9/5 * C) + 32 和 F = (C *9/5) + 32 有什么区别?优先?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57576934/

相关文章:

c - 内存泄漏/GLib 问题

Javascript:+= 运算符的奇怪行为

c++ - C++中按位运算符的返回类型

c++ - 是在索引一个新的 map 元素并将读取它的东西分配给它未定义的行为,还是只是未指定的?

c - 为什么 Linux 中的所有系统调用都使用 "call by reference"将参数传递给内核?

c - 在 C 中使用正则表达式时,\d 不起作用,但 [0-9] 起作用

可以访问网站但不能访问子目录中的文本文件

c# - 运算符 == 不能应用于 C# 中的泛型类型吗?

operator-keyword - 反引号运算符的固定性?

C 操作顺序