首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C解释中的运算符优先

C解释中的运算符优先
EN

Stack Overflow用户
提问于 2017-07-30 12:49:35
回答 3查看 274关注 0票数 1

我有以下代码:

代码语言:javascript
运行
复制
#include<stdio.h>
void main(){
int x;
x=1%9*4/5+8*3/9%2-9;
printf("%d \n", x);
}

程序的输出是-9。当我试图按照操作符优先级对代码进行分解时,(* / %,Multiplication/division/modulus,left-to-right)答案是-8

以下是守则的细目:

代码语言:javascript
运行
复制
x=1%9*4/5+8*3/9%2-9;
x=1%36/5+24/9%2-9;
x=1%7+2%2-9;
x=1+0-9;
x=-8;

有人能解释输出是如何-9的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-30 13:05:48

似乎你认为模比乘法和除法有更低的优先级,而实际上它没有。而不是

代码语言:javascript
运行
复制
x = (1 % ((9 * 4) / 5)) + (((8 * 3) / 9) % 2) - 9;

你真正代表的表达式

代码语言:javascript
运行
复制
x = (((1 % 9) * 4) / 5) + (((8 * 3) / 9) % 2) - 9;

第一个求和中的模是在乘法和除法之前应用的。

票数 2
EN

Stack Overflow用户

发布于 2017-07-30 12:51:45

代码语言:javascript
运行
复制
x = 1%9*4/5+8*3/9%2-9
== 1*4/5+24/9%2-9
== 4/5+2%2-9
== 0+0-9
== -9
票数 1
EN

Stack Overflow用户

发布于 2017-07-30 13:07:41

所有这些算子*, /, %都属于乘法算子范畴。它们的分组在C++标准(对C标准同样有效) 5.6乘法运算符中有更清楚的描述:

1乘法运算符*、/和%组左向右.

因此,这个表达式语句

代码语言:javascript
运行
复制
x=1%9*4/5+8*3/9%2-9;

等于以下语句

代码语言:javascript
运行
复制
x = (( ( 1 % 9 ) * 4 ) / 5 ) + ( ( ( 8 * 3 ) / 9 ) % 2 ) - 9;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45399988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档