高手过来帮忙解决一个关系运算的疑问

robinmatrix 2005-05-19 10:36:15
int a;
int b;
int c;
a=b=c1;
++a||++b&&++c;
printf("%d,%d,%d",a,b,c);
为什么结果是
2,1,1
...全文
58 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
robinmatrix 2005-05-19
  • 打赏
  • 举报
回复
先考虑++a 如果++a不正确再去考虑xxxxxxxx中的内容

比较合理的方式如何写呢?
robinmatrix 2005-05-19
  • 打赏
  • 举报
回复
思考的时候应该是先计算++b && ++c再计算,++a || (++b && ++c)
而程序执行的时候却并不是如此
而是考虑++a||xxxxxxxxxxx中++a而不去考虑xxxxxxxxxx中的内容是吧
robinmatrix 2005-05-19
  • 打赏
  • 举报
回复
这是习题。。。
Roaming_Sheep 2005-05-19
  • 打赏
  • 举报
回复
就是因为&&优先级高,所以++a||++b&&++c 等同 ++a || (++b && ++c)
(优先级高不等于表达式中一定先执行它)

求出++a 后,++a || (++b && ++c) 整个表达式的值已经知道,根据短路算法,后续的不再进行计算,所以(++b && ++c)部分是没有执行过的

但还是再强调一下,当写出 ++a||++b&&++c 这种代码的时候,就应该给自己一个耳光
robinmatrix 2005-05-19
  • 打赏
  • 举报
回复
然后再去||比较
robinmatrix 2005-05-19
  • 打赏
  • 举报
回复
我看了他书上面说的
但是&&的优先级别不应该高于||吗
不是应该先做&&吗
astrophor 2005-05-19
  • 打赏
  • 举报
回复
老潭的那本书有讲的
或运算在第一个是真的时候是不会对后面的进行下去的
你的++a||++b&&++c;第一个是++a为真
故到此就停止了,因此++b和++c不会被执行
Roaming_Sheep 2005-05-19
  • 打赏
  • 举报
回复
++a||++b&&++c;

当写出这种代码的时候,就应该给自己一个耳光

69,382

社区成员

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

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