【发布时间】:2019-06-26 03:51:23
【问题描述】:
你们中有人知道在 C 中如何计算吗?
uint8_t samplerate = 200;
uint8_t Result;
Result = 0.5 * samplerate;
现在,问题是 0.5 是浮点数,samplerate 是整数。
Result 可以是 0,因为 0.5 被转换为整数,因此四舍五入为 0 (Result = 0 * 200 = 0)。或者 Result 可能是 100,因为编译器首先看到 0.5 并将 samplerate 转换为浮点数 (Result = 0.5 * 200 = 100)。
编译器将如何处理这些计算是否有一种标准化的方式?
我的意思是编译器会先查看最左边的变量(在本例中为 0.5)并将另一个变量转换为此,还是会查看最右边的变量(samplerate)并将其他变量转换为此?
我知道如何解决这个问题,但我正在寻找一个通用的答案,如果这是 C 标准化的,它将如何计算这样的方程?
【问题讨论】:
-
请阅读this implicit conversion reference。它会告诉您
0.5将不会 转换为整数,而是相反,samplerate将转换为double。 -
@Someprogrammerdude,恐怕您正在使用具有(不同)转换规则的 c++ 参考作为参考。由于可能存在一个参数构造函数,C++ 中的自动隐式转换规则比 C 中的要复杂得多(它们是动态的、运行时的),并且您发布的示例无效。
-
@Someprogrammerdude,我为我的错误道歉。你是对的。
标签: c type-conversion type-promotion