| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1318 人关注过本帖
标题:到底是什么原因,计算顺序有问题,还是编译工具的故障
只看楼主 加入收藏
hxwj
Rank: 2
等 级:论坛游民
帖 子:75
专家分:34
注 册:2016-12-8
结帖率:57.14%
收藏
已结贴  问题点数:5 回复次数:5 
到底是什么原因,计算顺序有问题,还是编译工具的故障
int n=2,k=0;
k++&&n++>2;

执行上述    语句后,问n值和k值是什么

1.关系运算优先于逻辑运算;
2.逻辑运算中,若与运算中的一项为0,则与运算的结果直接为0,另一项没有机会参与运算

也就是说,先计算n++>2(计算后n的值变为3),且结果为0;再计算k++&&0;已经明显出现了0,k++就没有机会了,所以
整个式子的值为0 ;而k的值为0,n值为3

而很多编译程序的结果却是k=1,n=2
搜索更多相关主题的帖子: 原因 计算 编译 运算 结果 
2018-11-15 16:25
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:133
专家分:421
注 册:2018-10-15
收藏
得分:2 
你忽略了一点就是在语句k++&&n++>2;中涉及到的运算符的结合顺序都是从左至右的,所以在这个语句中有限计算的是运算符"&&"左边的表达式,左边的为假,然后后面的相信就不用我说了,你按照我的理解方式你试一试这个程序
#include "stdio.h"
int main()
{
  int n=2,k=0;
  n++>2&&k++;//运算符"&&"两边的表达式对调
  printf("%d\t%d",n,k);
return 0;
}
把运算符"&&"两边的表达式对调按照我上面的理解方式输出的n应该为3,k应该为0。希望对你有所帮助。
2018-11-15 16:40
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:2 
先评估 k++,表达式值为 0,副作用为 k=1
因为 && 的左边(就是k++)表达式值为0,所以就不需要继续评估右边的表达式了(即 n++>2 没有被评估)
所以最终 k=1,n=2

“而很多编译程序的结果却是k=1,n=2” ------ 按C语言标准,必须是k=1,n=2,如果不是,那你用的编译器有问题了,还是致命的大问题。
2018-11-15 16:43
hxwj
Rank: 2
等 级:论坛游民
帖 子:75
专家分:34
注 册:2016-12-8
收藏
得分:0 
回复 2楼 C基础
不知道是不是这个意思,只要最终为&&或者||运算,运算顺序始终从左边开始,这样理解对不?
2018-11-15 17:11
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:2 
讲一个基础知识
优先级和求值顺序没关系
不是优先级高就先算

https://zh.
2018-11-15 20:16
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:133
专家分:421
注 册:2018-10-15
收藏
得分:0 
回复 4楼 hxwj
嗯,可以这样理解
2018-11-16 14:53
快速回复:到底是什么原因,计算顺序有问题,还是编译工具的故障
数据加载中...
 
   



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

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