| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 983 人关注过本帖
标题:一个小问题,搞不明白,求解!
只看楼主 加入收藏
杨云山
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-12-22
结帖率:0
收藏
已结贴  问题点数:20 回复次数:11 
一个小问题,搞不明白,求解!
#include <stdio.h>
main()
{
int a = -1, b = 1, k;
if ( (++a < 0) &&! (b--<=0))
printf ("%d  %d", a, b);
else
printf ("%d  %d", b, a);
}
  为什么结果会是:1 0 ?
    想了好久、、求助啊
搜索更多相关主题的帖子: include 
2012-12-22 23:06
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6814
专家分:42393
注 册:2010-12-16
收藏
得分:2 
因为
++a 后 a = 0了,这个时候(++a < 0) 为假,这个时候  !(b--<=0)) 是不会执行了的,所以这个时候 a = 0 b 还是定于1
printf ("%d  %d", b, a); 就是 1 0 了

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-22 23:13
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6814
专家分:42393
注 册:2010-12-16
收藏
得分:0 
if (a && b ) 如果a为假,是不会对b进行判断了的,因为无论b为真假,这个if都是假了的,
if (a || b )如果a 为真,是不会对b进行判断了的,无论b真假 这个if都是真了的




我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-22 23:14
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:2 
++a 后,a值为0,不满足a < 0,然后&&,短路,后面不判断

if为假

输出b,a,也就是1,0


[fly]存在即是合理[/fly]
2012-12-22 23:15
姻脂梦
Rank: 6Rank: 6
等 级:侠之大者
帖 子:264
专家分:424
注 册:2012-7-3
收藏
得分:2 
版主正解
2012-12-22 23:16
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:2 
楼主你没有注意到关系运算符与逻辑运算符的优先级啊,回去看看书你就知道了,关系运算符的优先级高于逻辑运算符,在fi的语句中,if()的括号中,如果返回值为0,表示错误,不执行if后面的语句,如果是1则执行if后面的语句,++a的意思是,先将a的值+1,此时a已经等于0(注意a值已经是改变了),然后在与0比较,结果式子是错误的,因为0<0是错误的,而(b--<=0)这个式子中的b,楼主定义b并初始化的时候b=1,b--只是在b--<=0这个判断式中起作用的,并不改变b的初始值。

思考赐予新生,时间在于定义
2012-12-22 23:46
qq383264679
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:155
专家分:130
注 册:2012-1-19
收藏
得分:2 
if ( (++a < 0) &&! (b--<=0))
   这里出现了短路现象,当++a < 0时候,由于表达式错误,则没有必要计算余下的表达式了,所以整个表达式为false。
++a 为先+  后 计算
  所以 a = 0  b 没变化。
2012-12-22 23:52
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
版主正解啊,小弟解释得有点啰嗦了,还是错误的呢,我看完书之后才知道的

思考赐予新生,时间在于定义
2012-12-22 23:58
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:2 
&&和||是从左到右,一假则假,一真则真,其后忽略

小小战士,战士中的战斗机!
2012-12-23 02:19
唐兵
Rank: 2
来 自:四川泸州合江
等 级:论坛游民
帖 子:150
专家分:12
注 册:2012-12-1
收藏
得分:2 
if(a>b&&c>d).....
如果a>b为假则不执行c>d

一个人如果不比自己一把,你永远不知道自己究竟有多厉害
2012-12-23 13:20
快速回复:一个小问题,搞不明白,求解!
数据加载中...
 
   



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

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