1613551 发表于 2022-7-14 10:41:30

有没有人可以解释一下这个表达式是怎么算的

#include <stdio.h>
int main(void)
{
      int b = 7;
      float a = 2.5;
      float c = 4.7;

      printf("%f\n", a + (int)(b / 2 * (int)(a + c) / 2) % 4);
      return 0;
}

1613551 发表于 2022-7-14 10:42:03

为什么最后的结果是4.500000

柿子饼同学 发表于 2022-7-14 10:46:44

(int) a+c == (int) 2.5 + 4.7 == 7
里面变成 7 / 2 * 7 / 2 == 3 * 7 / 2 == 10
10 % 4 == 2
a + 2 == 4.5
%f 默认取 6 位
所以结果就这样

jhq999 发表于 2022-7-14 10:54:12

本帖最后由 jhq999 于 2022-7-14 10:55 编辑

(int)(b / 2 * (int)(a + c) / 2) % 4)=(int)(7/2* (int)(7.2) / 2) % 4)=(int)(7/2* 3 % 4)=(int)(10.5% 4)=(int)(2.5)=2
2.5+2=4.5

1613551 发表于 2022-7-14 10:54:45

柿子饼同学 发表于 2022-7-14 10:46
(int) a+c == (int) 2.5 + 4.7 == 7
里面变成 7 / 2 * 7 / 2 == 3 * 7 / 2 == 10
10 % 4 == 2


我不理解,不应该是2.5+ (int)(7/2*7/2)%4==2.5+(int)(3.5*7*2)%4==2.5+(int)(12.25)%4==2.5+12%4==2.5+0=2.5吗?

1613551 发表于 2022-7-14 10:58:36

柿子饼同学 发表于 2022-7-14 10:46
(int) a+c == (int) 2.5 + 4.7 == 7
里面变成 7 / 2 * 7 / 2 == 3 * 7 / 2 == 10
10 % 4 == 2


我懂了,因为b是int型

柿子饼同学 发表于 2022-7-14 13:12:41

1613551 发表于 2022-7-14 10:54
我不理解,不应该是2.5+ (int)(7/2*7/2)%4==2.5+(int)(3.5*7*2)%4==2.5+(int)(12.25)%4==2.5+12%4= ...

对 , int / int 结果还是 int 会直接砍掉小数部分 , 不是四舍五入
页: [1]
查看完整版本: 有没有人可以解释一下这个表达式是怎么算的