| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1142 人关注过本帖, 1 人收藏
标题:[讨论]good有关"&&"的一道题
只看楼主 加入收藏
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
结帖率:92.86%
收藏(1)
 问题点数:0 回复次数:6 
[讨论]good有关"&&"的一道题

原题: 1.设整型变量m,n,a,b,c,d 均为1,执行:(m=a>b)&&(n=a>b);后m,n的值为: 0,1 不解之处: n=1是怎么得到的? 我的分析: 1. (m=a>b)&&(n=a>b); ()运算符优先级最高,所以先算(m=a>b),m=0 (n=a>b),n=0 这里n=0才对啊?但实际运行结果是:n=1 A程序 main() { int m=3,n=3,a=1,b=1,c=1,d=1 ; /*为方便观察m,n值的变化,改为3*/ (m=a>b)&&(n=a>b); printf("m=%d n=%d a=%d b=%d c=%d d=%d\n",m,n,a,b,c,d); } 结果:m=0 n=3 a=1 b=1 c=1 d=1 (n=a>b)被短路 若令 a=2,这时(n=a>b)被计算, m=1 n=1 a=1 b=1 c=1 d=1

&& 比 () 优先级更高吗? 2。更改如下: (m=a>b)&&!(n=a>b); 我认为 !(n=a>b) 首先计算,但实际上并不是,!(n=a>b)并没有被计 算,同样被“短路”了。 B程序 main() { int m=3,n=3,a=1,b=1,c=1,d=1 ; /*为方便观察m,n值的变化,改为3*/ (m=a>b)&&!(n=a>b); printf("m=%d n=%d a=%d b=%d c=%d d=%d\n",m,n,a,b,c,d); } 结果: m=0 n=3 a=1 b=1 c=1 d=1 若令 a=2 m=1 n=1 a=2 b=1 c=1 d=1 可以看出还是先计算(m=a>b) 难道 && 优先级比 !,()还高?

搜索更多相关主题的帖子: good 变量 运算符 整型 
2004-06-16 09:41
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 

你说的是对的,一个与运算,它会先判断与的前面的值是否为真,

如果为真计算与后面的运算,如果为假与后面的运算就不计算了,也就是你说的短路了!!!


差点把你忘了...
2004-06-16 10:02
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

但是,(m=a>b)&&!(n=a>b);

是不是该先计算 !(n=a>b)?

!,()的优先级比&&高

但事实没有计算首先 !(n=a>b)


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-06-16 11:32
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

再如这个:

main() { int m=3,n=3,a=1,b=1,c=1,d=1 ; /*为方便观察m,n值的变化,改为3*/ m=a>b?1:0&&!(n=a>b); printf("m=%d n=%d a=%d b=%d c=%d d=%d\n",m,n,a,b,c,d); } m=a>b?1:0 优先级(?:)是最底的,!(n=a>b)是不是该先执行呢? 但事实并没有: m=0 n=3 a=1 b=1 c=1 d=1


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-06-16 11:45
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 

我想优先级并不是说在一个运算语句中谁的优先级高就最先执行谁!!

a*b+b*a;是怎么运算的???

[此贴子已经被作者于2004-06-16 15:01:30编辑过]


差点把你忘了...
2004-06-16 15:00
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

优先级肯定是说在一个运算语句中谁的优先级高就最先执行谁!!

如: a*b+b*a; (令a=3,b=4)

从左往右 先计算 a*b = 12 再计算 b*a = 12 再算 12+12 =24

否则如你所说:

a*d =12 12+b =16 16*a = 48 肯定是错的,这样,优先度的概念就没意义了。

实际上,我提的几个问题,可以说是“文字游戏”,呵呵,不知道有几个人能一次就看明白。


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-06-16 16:38
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 
什么是“文字游戏”,不要卖关子!!!!

差点把你忘了...
2004-06-16 16:54
快速回复:[讨论]good有关"&&"的一道题
数据加载中...
 
   



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

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