求解C语言赋值运算符与逗号运算符问题

weixin_41292798 2017-12-06 11:53:15
#include<stdio.h>
main()
{
int a = 3,b = 2,c = 4,d = 8,e = 0;
a += b * c;
b-= c / b;
d%= a;
printf("a = %d,b = %d,c = %d,d = %d\n",a,b,c,d);
e = (a + b >d,b || c,c++,++d,3+2);
printf("a = %d,b = %d,c = %d,d = %d,e = %d\n",a,b,c,d,e);
}

倒数第三行的代码看不懂。这个e的值是不是3+2?为什么?倒数第二行a,b,c,d的值又是多少?为什么?尤其是这个b || c看不懂,求大神解答,谢谢
...全文
260 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-12-06
  • 打赏
  • 举报
回复
b || c是判断表达式,若b为非0,则该逗号里的表示为1,若b为0,但是c为非0,则该表示的值为1,若b和c都为0,则表达式的值为0.
自信男孩 2017-12-06
  • 打赏
  • 举报
回复
其实这个是逗号运算符的问题,逗号运算符是将最后一个表达式的值赋值给e
weixin_41292798 2017-12-06
  • 打赏
  • 举报
回复
逗号运算符优先级最低
羽飞 2017-12-06
  • 打赏
  • 举报
回复
先把运算符的优先级捞出来,按照优先级高低做运算 b||c的优先级,跟逗号的优先级,谁高谁低?
羽飞 2017-12-06
  • 打赏
  • 举报
回复
e = (a + b >d,b || c,c++,++d,3+2); e = ( ( (a + b) >d), (b || c) , (c++), (++d) , (3+2) ); 这个逗号运算符比较好理解,e最后就是3+2的值,b||c也起不了什么作用,因为逗号运算符也不会关心之前的逻辑运算结果导致“短路”,这个应该是题目拿来迷惑的,楼主的意志要坚定 int a = 3,b = 2,c = 4,d = 8,e = 0; a += b * c; a = 11 b-= c / b; b = 0 d%= a; d = 8

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧