| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 422 人关注过本帖
标题:好奇怪的题目。。。。
只看楼主 加入收藏
mxn
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-3-31
收藏
 问题点数:0 回复次数:6 
好奇怪的题目。。。。
#include "stdio.h"
main()
{
int a=5,b=6,c=1,x=2,y=3,z=4;
c=(a=c>x)&&(b=y>z);
printf("%d,%d,%d",a,b,c);
}
这里B为什么是6,而a却是0啊???
搜索更多相关主题的帖子: include 
2007-04-04 19:41
mxn
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-3-31
收藏
得分:0 
在线等。。。
2007-04-04 19:48
天使有泪
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2007-4-3
收藏
得分:0 
我也觉得奇怪啊
我觉得b也应该是0的,因为y不〉z
2007-04-04 19:55
mxn
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-3-31
收藏
得分:0 

2007-04-04 19:57
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 

这是因为编译器有优化功能,在计算如a&&b这样的逻辑表达式时,当a为假时结果就为假,不会计算后面的b的值。同样的计算如a||b的值时,当a的值为真时不会再计算b的值。

因为a=c>x的值为假,所以后面的b=y>z没有计算,可以用下面的两个程序验证:
#include "stdio.h"
main()
{
int a=5,b=6,c=1,x=2,y=3,z=4;
c=(a=c>x)&&(printf("done!"));
printf("%d,%d,%d",a,b,c);
}
输出为:0,6,0
#include "stdio.h"
main()
{
int a=5,b=6,c=1,x=2,y=3,z=4;
c=(a=c<x)&&(printf("done!"));
printf("%d,%d,%d",a,b,c);
}
输出为:done!1,6,1

同样的可以验证a||b形式的求值情况

2007-04-04 21:13
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
收藏
得分:0 
a=c&gt;x C比X小,所以是O,剩下就是编译器问题了,当前面的条件决定了表达式的值后,后面的运算不会继续执行。
2007-04-04 21:18
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 
虽然中间是&&运算
但前面为0,0&&任何值为0
所以不执行后面那句...


 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-04-04 21:35
快速回复:好奇怪的题目。。。。
数据加载中...
 
   



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

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