deng_o3o 发表于 2020-3-19 21:03:46

来看看c语言这个大宝贝吧

为什么输出是2.500000而不是0.250000
我的过程是:2.5+a=5.5   
                   5.5%3=1   
                       1*int(x+y)=7
                   7%2=1
                   1/4=0.25

Given2001 发表于 2020-3-19 21:12:12

没看代码,不过你的过程中5.5%3=1如果%是取余的话,我要提醒一下%的两个操作数必须是整数

青青兮云 发表于 2020-3-19 21:12:55

a%3=0,m=2.5,输出2.500000

墨羽岚 发表于 2020-3-19 21:13:20

%两边只能是整型数哦{:10_245:}

青青兮云 发表于 2020-3-19 21:15:33

你没有弄清楚运算符的优先级,%大于+,怎么会先执行2.5+a

墨羽岚 发表于 2020-3-19 21:15:35

还有一件事,c语言加减乘除也是先乘除再加减的。。。。这部分基础知识你先去网上了解一下吧

Given2001 发表于 2020-3-19 21:17:36

本帖最后由 Given2001 于 2020-3-19 21:19 编辑

我大概明白你错在哪了,+ 的优先级是小于 % 的,所以先计算 %
根据代码的意思,我帮你加了个括号,便于你理解:
m = x + (a % 3 * (int)(x+y) % 2 / 4);
如果要按照你的过程来,这句应该这样改:
m = (x + a) % 3 * (int)(x+y) % 2 / 4;

4goodworld 发表于 2020-3-19 22:04:38

运算的优先级问题
如果你确定要按照你的步骤来,你不确定自己清楚优先级的情况下,请自行加上括号来区分
页: [1]
查看完整版本: 来看看c语言这个大宝贝吧