gpt4 book ai didi

c++ - 为什么括号在这个简单的代码中有所不同

转载 作者:行者123 更新时间:2023-11-27 22:33:19 25 4
gpt4 key购买 nike

当我在此 float 中添加两个括号时,输出变为零。

int main()
{
float a=12.00*(20/100);
cout <<a<<endl;
}

如果我删除括号,输出将为 2.4但如果我保留它,输出将为零。为什么???

最佳答案

12.00*20/100 被解析为 (12.00*20)/100 并被评估:

  • 因为 12.00 包含一个小数点;它是一个值为 12 的 double
  • 20 是一个值为 20 的 int
  • 12.00*20 中,int 20 被转换为 double,生成值为 20 的 double .
  • 然后 double 值 12 和 20 相乘,产生 double 值 240。
  • 然后 (12.00*20)/100double 240 除以 int 100。
  • int 100 转换为 double 100。
  • 然后 double 240 除以 double 100,产生一个 double 值大约为 2.4(当 IEEE-754 binary64 时,正好是 2.399999999999999911182158029987476766109466552734375被使用)。

相比之下,评估12.00*(20/100):

  • 20100 都是int 值,所以20/100 是用int 执行的 部门。 int 除法产生一个 int 结果并丢弃小数部分。所以结果是 int 值 0。
  • 然后 12.00*(20/100)double 值 12 乘以 int 值 0,得到 0。<

总而言之,有两件事在起作用:

  • 给定一个表达式 a*b/c,其中两个运算符 */ 在其他方面具有相同的优先级,它们被构造为执行先离开手术。 (这是乘法运算符的规则。一些运算符,例如赋值,从右到左关联。)
  • 使用 int 操作数的乘法或除法是通过 int 算术完成的,即使整个表达式在其他地方包含 double 操作数。在混合 intdouble 操作数的乘法中,int 操作数被转换为 double

关于c++ - 为什么括号在这个简单的代码中有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58242723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com