C 为什么这个函数输出它的数字?

C 为什么这个函数输出它的数字?,c,C,输出 代码 问题: 为什么它从45%的54/5输出9?这不是输出2吗?我能看到9的唯一方法就是跳过除法操作符,对吗?然后除以5,完全省略54,但这对我来说毫无意义 编辑:随机第二个问题。如果我把我的文件命名为test.c,用cc test.c-o test编译它,然后进行类型测试,什么都不会发生。如果我使用除test之外的任何其他名称进行编译,它都可以正常工作。有什么好处 45 % 54 / 5 是 其评估为: 45 % 54 = 45 45 / 5 = 9 45模54等于45。我不明白你

输出

代码

问题:

为什么它从45%的54/5输出9?这不是输出2吗?我能看到9的唯一方法就是跳过除法操作符,对吗?然后除以5,完全省略54,但这对我来说毫无意义

编辑:随机第二个问题。如果我把我的文件命名为test.c,用cc test.c-o test编译它,然后进行类型测试,什么都不会发生。如果我使用除test之外的任何其他名称进行编译,它都可以正常工作。有什么好处

45 % 54 / 5

其评估为:

45 % 54 = 45
45 / 5  = 9
45模54等于45。我不明白你怎么能期望得到2,不管你怎么订购

其评估为:

45 % 54 = 45
45 / 5  = 9

45模54等于45。我看不出,不管你如何排序,你怎么能得到2。

模运算符与除法运算符具有相同的优先级,因此运算是按从左到右的顺序执行的,这意味着先执行模

45 % 54 = 45
然后


如果45/5和45%54不相等,这将更容易发现,但这里的数字似乎是重合的。

模运算符与除法运算符具有相同的优先级,因此操作按从左到右的顺序执行,这意味着先执行模

45 % 54 = 45
然后


如果45/5和45%54不相等,这将更容易发现,但这里的数字似乎是巧合。

C99标准对C99 6.5表达式/3脚注74中的运算符优先级有这样的规定:

语法指定表达式求值时运算符的优先级,这与此子类的主要子类的顺序相同,优先级最高

稍后,我们将看到乘法运算符集中在一起:

6.5.5乘法运算符 语法 乘法表达式: 演员表情 乘法表达式*强制转换表达式 乘法表达式/强制转换表达式 乘法表达式%cast表达式

因为它们在同一个主节中,它们的优先级相等,并且它们是左关联的,所以表达式:

45 % 54 / 5
实际上:

  (45 % 54) / 5
= (45) / 5           # 45 / 54 is 0, with a remainder of 45
= 9
这就是为什么你的答案是9

a在旁注中,我认为我在C标准中发现了一个漏洞,因为我找不到与这些操作符的左或右关联性有关的东西,无论a/b*C的计算结果是a/b*C还是a/b*C

但是,上面的语法本身规定了这一点。因为语法部分说明:

multiplicative-expression:
    multiplicative-expression * cast-expression
像a/b*c这样的表达式必须将c分配给强制转换表达式,将a/b分配给乘法表达式,并首先对其求值


因此,乘法运算符是左结合的,ISO BOD以及某些SO BOD再次证明自己比I更聪明:-

C99标准对C99 6.5表达式/3脚注74中的运算符优先级有这样的说法:

语法指定表达式求值时运算符的优先级,这与此子类的主要子类的顺序相同,优先级最高

稍后,我们将看到乘法运算符集中在一起:

6.5.5乘法运算符 语法 乘法表达式: 演员表情 乘法表达式*强制转换表达式 乘法表达式/强制转换表达式 乘法表达式%cast表达式

因为它们在同一个主节中,它们的优先级相等,并且它们是左关联的,所以表达式:

45 % 54 / 5
实际上:

  (45 % 54) / 5
= (45) / 5           # 45 / 54 is 0, with a remainder of 45
= 9
这就是为什么你的答案是9

a在旁注中,我认为我在C标准中发现了一个漏洞,因为我找不到与这些操作符的左或右关联性有关的东西,无论a/b*C的计算结果是a/b*C还是a/b*C

但是,上面的语法本身规定了这一点。因为语法部分说明:

multiplicative-expression:
    multiplicative-expression * cast-expression
像a/b*c这样的表达式必须将c分配给强制转换表达式,将a/b分配给乘法表达式,并首先对其求值


因此,乘法运算符是左结合的,ISO BOD以及某些SO BOD再次证明了它们比I更聪明:-

查找相关运算符的优先级。这个例子真的需要那么长吗?只是为了问45%54/5是如何计算的?关于你的第二个问题:你必须使用./test,而不是test。测试是一个测试。我在unix环境中。如果我做cc test.c-o hurrdurr并键入hurrdurr,一切都正常。请查找相关的运算符优先级。这个例子真的需要那么长吗?只是为了问45%54/5是如何计算的?关于你的第二个问题:你必须使用./test,而不是test。测试是一个测试。我在unix环境中。如果我做cc test.c-o hurrdurr并输入hurrdurr,一切都很好。谢谢,为什么呢?54乘以45,所以就没有余数了,不是只有0吗?你把引号弄糊涂了
带余数/模数的nt。54进入45 0次,余数为45。@soju如果进入0次,则所有内容都是余数。@soju有一个余数,它是45。54分为45次,剩下45次。啊,好的,谢谢。所以如果我有20%的7,7会变成20两次,剩下的是6。如果我有1%9999999,余数仍然是初始值?我觉得很奇怪,谢谢你的回答。谢谢,为什么?54乘以45,所以就没有余数了,不是只有0吗?你把商和余数/模混淆了。54进入45 0次,余数为45。@soju如果进入0次,则所有内容都是余数。@soju有一个余数,它是45。54分为45次,剩下45次。啊,好的,谢谢。所以如果我有20%的7,7会变成20两次,剩下的是6。如果我有1%9999999,余数仍然是初始值?我觉得很奇怪,谢谢你的回答。他们有同样的优先权。。。mod是第一个绑定的,因为它们是左关联的…它们不是有相同的优先级吗?对,我错误地说更高,只是因为它看起来是从左到右的。修正。它们具有相同的优先级。。。mod是第一个绑定的,因为它们是左关联的…它们不是有相同的优先级吗?对,我错误地说更高,只是因为它看起来是从左到右的。修理。