| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2328 人关注过本帖
标题:请解释一下,我看不懂
只看楼主 加入收藏
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
结帖率:90.63%
收藏
已结贴  问题点数:10 回复次数:17 
请解释一下,我看不懂
#include<stdio.h>
int main()
{
    int x=10,y=20,z=30;
    printf("%d %d %d %d\n",x=y=z,x=y==z,x==(y==z),x==(y==z));
    return 0;
}
搜索更多相关主题的帖子: return 
2016-05-29 23:59
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
输出是 30 30 0 0
2016-05-29 23:59
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:5 
首先区分=和==的区别。前者是赋值,后者是关系运算符等于
输出应该是:30 0 0 0吧?
三点:
1、赋值=的结合运算是从右向左,例如 a=b=c 从右到左赋值,先将c的值给b,然后在将b的值给a
2、=的优先等级没有==高,x=y==z先判断y==z为假返回0,然后0赋值给x,故第二个也是0
3、==,判断==的左右是否相等,相等的话该表达式返回1,否则返回0;故上述输出两个0        

[此贴子已经被作者于2016-5-30 00:10编辑过]

2016-05-30 00:05
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
回复 3楼 wanglianyi1
可是为什么第二个会输出30呢?
2016-05-30 00:08
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 4楼 _Strike
不是30哦,应该也是0 哦,你试了嘛?
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-05-30 00:09
背对背
Rank: 1
来 自:江西
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-5-11
收藏
得分:0 
输出 30 0 0 0
30:是因为将z=30赋值给y,再给x;
0 :==是关系运算符,判断是否相等。因为z!=y,所以为0,再将0赋给x(==的优先级大于=)
后面两个0同样的道理
2016-05-30 00:09
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
回复 6楼 背对背
编译器vs和vb都输出是30 30 0 0
2016-05-30 00:10
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
回复 5楼 wanglianyi1
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-05-30 00:11
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
回复 5楼 wanglianyi1
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-05-30 00:12
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
难道是编译器的问题吗,还是我自己的问题?
2016-05-30 00:14
快速回复:请解释一下,我看不懂
数据加载中...
 
   



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

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