社区
新手乐园
帖子详情
关于C语言运算符优先级的问题
k906325292
2009-07-08 02:06:29
a=c[b++]
该怎么运算呀,为什么是先赋值后加1操作呢……
k=(x++,y++);
k=x++,y++;
还有这2个式子的结果一样吗?第一个我知道是把Y得值赋给K(这是逗号表达式的规则),但是第二个呢……
刚开始学运算符本来觉得挺简单的,结果越深入学搞的越迷糊……特别是优先级和结合性这方面
还有一个式子
int a=10;
a+=a-=a*=a;
这个式子完全不知道该怎么入手……希望高手赐教
在下感激不尽……
...全文
264
13
打赏
收藏
关于C语言运算符优先级的问题
a=c[b++] 该怎么运算呀,为什么是先赋值后加1操作呢…… k=(x++,y++); k=x++,y++; 还有这2个式子的结果一样吗?第一个我知道是把Y得值赋给K(这是逗号表达式的规则),但是第二个呢…… 刚开始学运算符本来觉得挺简单的,结果越深入学搞的越迷糊……特别是优先级和结合性这方面 还有一个式子 int a=10; a+=a-=a*=a; 这个式子完全不知道该怎么入手……希望高手赐教 在下感激不尽……
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
北辰猫咪
2009-07-08
打赏
举报
回复
a=c[b++] // 在变量后面的++符号必须在其所在表达式运行完之后才会给b加上1。如果放在b的前面就会先给b加1,然后再运行表达式
k=(x++,y++);
k=x++,y++;
// ()里面是逗号表达式,表达式的值是最后一个表达式的值。++符号前面已经说过。按照优先级来说,第二个式子应该由k=x++和y++组成的逗号表达式,结果自然是y的值。
int a=10;
a+=a-=a*=a;
// 这个式子的执行顺序是:
1: a+=a-=(a*=a);
2: a+=(a-=(a*=a));
下面就知道了吧。
呵呵,c语言很重要的,加油啊~
Crazy_hand
2009-07-08
打赏
举报
回复
对不起。楼主 。我说错话了。
应该是 ”大烧饼“ ,没有“兰州”的(习惯一起写了。。)
在说声“对不起,不是有意那样写的。”
Crazy_hand
2009-07-08
打赏
举报
回复
不要倒腾了,如果想连用就用括号把运算顺序括出来,要不就直接多写几句,把它写清楚。这样真的没什么意义
第三个式子,兰州大烧饼才会那样写。
Fleeboy
2009-07-08
打赏
举报
回复
书上都写得很清楚。
yxd_1982
2009-07-08
打赏
举报
回复
1. a=c[b++]
先算[]里面,这里++是后置,所以先取b的值,然后b++,这个相当于: a=c[b], b++;
2.k=(x++,y++);
k=x++,y++;
肯定是不一样的。主要区别是第一个有括号;第一个相当于:k=y; 第二个相当于: k=x;
3.int a=10;
a+=a-=a*=a;
这个并不难,关键是找到破解点。赋值运算符的结合方向是从右向左,所以运算顺序是:
a=a*a;(这时a=10*10=100)
——>
a=a-a;(a=100-100=0)
——>
a=a+a;(a=0+0=0)
Walf_ghoul
2009-07-08
打赏
举报
回复
第三个,个人感觉是0,中间有个a -= a。。。
Walf_ghoul
2009-07-08
打赏
举报
回复
第二个就是运算符的优先级问题了
k=(x++,y++); //将y增值前的值赋给k
k=x++,y++; //将x增值前的值赋给k
Walf_ghoul
2009-07-08
打赏
举报
回复
先看x++,++x,两个都会对x加一,但是x++在加一前产生拷贝,用于周围的表达式,而++x在加一后产生拷贝,用于周围的表达式,所以单独使用时两者是没有区别的,和别的有联系时,就有差别了。。
「已注销」
2009-07-08
打赏
举报
回复
第一个和第三个还能理解……
第二个就不明白了,就那2个逗号表达式
根据3楼和4楼的说法,第一个式子可以说是用K来表示括号里面那个逗号表达式的值,那么第二个式子呢?
如果说K仅仅用来表示X++的值,那用什么变量来表示整个逗号表达式的值呢?
整个逗号表达式的值就是子表达式y++的值,这仅仅是一种说法吗?(不能用某个变量来表示?)
不知道有没有人能听懂我说的什么意思……
飞天御剑流
2009-07-08
打赏
举报
回复
a=c[b++]
该怎么运算呀,为什么是先赋值后加1操作呢……
-----------------------------------------
那个++是后增量啊,后增量就是b先应用了再自加一,就是先计算a = c[b],再计算b = b + 1
k=(x++,y++);
k=x++,y++;
还有这2个式子的结果一样吗?第一个我知道是把Y得值赋给K(这是逗号表达式的规则),但是第二个呢……
刚开始学运算符本来觉得挺简单的,结果越深入学搞的越迷糊……特别是优先级和结合性这方面
----------------------------------------------------------------
赋值运算符的优先级比逗号运算符要高,因此x++子表达式是赋值运算符的操作数,先计算k=x++,再计算y++,整个逗号表达式的值就是子表达式y++的值,而y++
的值就是y的值,y的值先应用后,再自加一。
int a=10;
a+=a-=a*=a;
这个式子完全不知道该怎么入手……希望高手赐教
-----------------------------------------
+=、-=和*=的优先级相同,结合性从右到左,因此这表达式可如下划分:a += ( a -= ( a *= a ) )
但是,赋值运算符的求值顺序是实现相关的,就是说,对于a + b来讲,先计算a还是先计算b,不同编译器的顺序是不同的,因此,a+=a-=a*=a表达式的结果
会因编译器而异。
Arnold9009
2009-07-08
打赏
举报
回复
a=c[b++]
变量后面的++运算符本来就是在表达式的值计算完之后再加
k=(x++,y++);
k=x++,y++;
这两个表达式的结果完全不一样
第一个表达式是将括号里的逗号表达式的值赋给k
第二个表达式是一个逗号表达式,这个表达式的结果是最右边的表达式的值
赋值运算都是从右至左求值的,所以a+=a-=a*=a; 的计算顺序为:
先计算a*=a的值赋给a
然后计算a-=a的值赋给a
然后再计算a+=a的值
最终结果应该是a=0
ysuliu
2009-07-08
打赏
举报
回复
个人觉得不必深究。。这些东西只会出现在书上或者考试中。。。
工作中绝对不会有的,首先一点就是编译器在这种复杂表达式都有可能有区别,再有,即使你是大牛,写出这样的代码,也会被人骂的。。
大前置
2009-07-08
打赏
举报
回复
a=x++; //先赋值后加1操作
b=++x; //先加1后赋值
C语言
运算符优先级
.xls
C语言
运算符优先级
C语言
运算符优先级
.pdf
C语言
运算符优先级
,同一优先级的运算符,运算次序由结合方向所决定。简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
C语言
运算符优先级
和结合性表
C语言
运算符优先级
和结合性表,全面介绍了
C语言
运算符的优先级和结合性。
C语言
运算符优先级
和口诀.doc
C语言
运算符优先级
和口诀 便于在学习
C语言
中查阅哦。
C语言
运算符优先级
.docx
C语言
运算符优先级
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章