| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 348 人关注过本帖
标题:一道不懂的逻辑“与”,逻辑“或”,求解答
只看楼主 加入收藏
大兔子
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2012-7-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
一道不懂的逻辑“与”,逻辑“或”,求解答
#include <stdio.h>
 
 int main(void)
 {
     int x, y, z;
     x = y = z = 2;
     ++x || ++y && ++z;
     printf("%d, %d, %d\n", x, y, z);
     ++x && ++y || ++z;
     printf("%d, %d, %d\n", x, y, z);
     return 0;   
 }
这是程序的源代码。
我认为运算的结果会是:
3,3,3
4,4,4
但是,我用gcc编译的结果是:
3,2,2
4,3,2
为什么会这样?不是都自加而已吗???
这道题逻辑运算的顺序是怎么样?
搜索更多相关主题的帖子: return 源代码 include 
2012-09-17 19:39
admin_xyz
Rank: 2
等 级:论坛游民
帖 子:195
专家分:77
注 册:2012-6-24
收藏
得分:15 
     ++x || ++y && ++z;     //等同于     (++x) || (++y && ++z);
//编译器先首先判断 ++x是否为真,若为真,便不考虑后面的条件了.直接执行下一语句

     ++x && ++y || ++z;   //等同于    (++x && ++y)  ||  (++z);  
//先判断 (++x && ++y) 是否为真(也就是判断是否非0),为真,执行下一语句。因为后面是||,这是逻辑或,有任一条件满足就往下执行。

自己的见解,望楼主加分
收到的鲜花
  • 大兔子2012-09-18 09:15 送鲜花  3朵   附言:我很赞同

总有人比你努力,可怕的是比你牛的人比你还努力。
2012-09-17 20:27
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
收藏
得分:5 
1.逻辑与优先级高于逻辑或
2.A&&B:A为假,B就不运行,同理C||D :C为真,D就不运行
2012-09-17 21:05
快速回复:一道不懂的逻辑“与”,逻辑“或”,求解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014488 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved