社区
C语言
帖子详情
一个关于c语言的++,--的问题
SeekInRain
2000-08-14 11:44:00
int i=3,k;
k=++i+(++i)+(++i);
小弟算来算去总是15,但结果应该是18, 请高手详细分析一下吧!!!!!1 小菜鸟感激不尽!!!!!!!!!!
...全文
429
22
打赏
收藏
一个关于c语言的++,--的问题
int i=3,k; k=++i+(++i)+(++i); 小弟算来算去总是15,但结果应该是18, 请高手详细分析一下吧!!!!!1 小菜鸟感激不尽!!!!!!!!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
E
2001-02-03
打赏
举报
回复
肯定是个白痴
graygu
2001-02-03
打赏
举报
回复
还是要注意新旧编译器的区别。程序中可能会有这样的语句
k= ++i+i++;
fty
2001-02-03
打赏
举报
回复
如果程序中有 k= ++i+i++; 这样的语句.那编程的不是个白痴就是个天才.
tom7587758
2001-02-02
打赏
举报
回复
真是吃饱撑着!对于初学者,这种问题可以先留到后来再做。如果你要的话。
k=++i+(++i)+(++i);
先讨论优先级,自增运算符》计算运算符。3个自增运算符一起,++i=6.在把
3个++i相加得18。
可以这样理解。
hoyle
2000-08-21
打赏
举报
回复
对不起,我把名字打错了,应该是jiujiejushi
hoyle
2000-08-21
打赏
举报
回复
jiujieshi:
我言语不周,向你道歉。
我把我所知道的东西再说一遍吧。这个问题早在95年电脑报上就有人提出来过,我当时年幼,看了一些高手的解答。有一种解答比较令人信服,即,类似于本问题中的情形,不同的编译器编译出来的结果是不一样的。所以答案是15还是18取决于编译器。不过,按照大多数C编译器的标准,对赋值语句和表达式的处理是不一样的。就是说,printf("%d",k)和printf(" %d",(++i)+(++i)+(++i));的结果肯定是不一样的,因为编译时处理方法不同,所以它们两个没有可比性。
按照以前电脑报上的答案,对于大多数编译起来说,应该是前者为18,后者为15。(如果我没有记错的话,不过有一点可以肯定,就是答案肯定不一样。)。另:据说某些Release版和Debug版
也会不一样,我没试过,不敢妄言。
另外,只在C/C++层面上讨论这个问题没有多大意义,看一看汇编代码,就一目了然了。
但请记住最重要的一点:由于C巨大的灵活性,类似的问题与编译器密切相关。
最后,再次向jiujieshi表示歉意,请原谅我的年轻,不会说话。
致
敬
hoyle
jiujiejushi
2000-08-21
打赏
举报
回复
版主:
不是我想贴这么多次的!
前边几次每次都是服务器内部错误,重新打开也看不到新贴子,所以贴了这么多次。
把重复的删掉吧。
jiujiejushi
2000-08-21
打赏
举报
回复
hoyle:
我只是把我记得的东西说出来做个参考而已,况且那是18的唯一解释。何必如此激动。
i++是后计算++,你应该知道的。问题是是在整个表达式运算的最先最后计算++、--还是在表达式中间碰到一个算一个没有明确规定(至少VC6语言参考手册上没有)。你看了下面的东西,我不知道你还会说些什么。
------------------------------------
各位:
我测试了一下,得出了难以置信的结果。
#include "stdio.h"
void main(void)
{
int i=3,k;
k=++i+(++i)+(++i);
printf("%d",k);
i=3;
printf(" %d",++i+(++i)+(++i));
}
Win98SE,VC6,控制台应用。
输出结果是:
****************************
16 16
****************************
哪位能解释一下。
修改了一下:
#include "stdio.h"
void main(void)
{
int i=3,k;
k=(++i)+(++i)+(++i);
printf("%d",k);
i=3;
printf(" %d",(++i)+(++i)+(++i));
}
输出结果不变。
jiujiejushi
2000-08-21
打赏
举报
回复
hoyle:
我只是把我记得的东西说出来做个参考而已,况且那是18的唯一解释。何必如此激动。
i++是后计算++,你应该知道的。问题是是在整个表达式运算的最先最后计算++、--还是在表达式中间碰到一个算一个没有明确规定(至少VC6语言参考手册上没有)。你看了下面的东西,我不知道你还会说些什么。
------------------------------------
各位:
我测试了一下,得出了难以置信的结果。
#include "stdio.h"
void main(void)
{
int i=3,k;
k=++i+(++i)+(++i);
printf("%d",k);
i=3;
printf(" %d",++i+(++i)+(++i));
}
Win98SE,VC6,控制台应用。
输出结果是:
****************************
16 16
****************************
哪位能解释一下。
修改了一下:
#include "stdio.h"
void main(void)
{
int i=3,k;
k=(++i)+(++i)+(++i);
printf("%d",k);
i=3;
printf(" %d",(++i)+(++i)+(++i));
}
输出结果不变。
borz
2000-08-18
打赏
举报
回复
printf("%d",++i+(++i)+(++i));
“,”后从左至右
4+5+6
怎么会不等于15呢?
又如:
printf("%d",(i++)+(i++)+(i++));
则是:
3+4+5
SeekInRain
2000-08-18
打赏
举报
回复
谢谢各位, 我知道了, 用asm语言写以上程式可以清楚地看出先做++运算得到i为6, 然后将3个i相加得到18~~~~~~~~~~~~~~~~ 但还有些不明白-----用printf("%d",++i+(++i)+(++i));打印出的结果为15, 这是为什么啊??????
onion
2000-08-18
打赏
举报
回复
拷,看来高手的语言基础也不怎么样。
hoyle
2000-08-18
打赏
举报
回复
胡说,难道++(i++)是先算完两个++之后才算括号的吗?
jiujiejushi
2000-08-18
打赏
举报
回复
我记得谭浩强的书(书名不用说了吧)上说,++是整个表达式最先处理的,否则不论运算顺序如何,结果都是15。
Kevin_qing
2000-08-16
打赏
举报
回复
TNND谁这么写程序,不是超级天才就一定是大白痴。
一定是什么教材里面的白痴题目吧
Arsoka
2000-08-16
打赏
举报
回复
k=++i+(++i)+(++i);
对应的汇编如下(用bc -S 得到)
inc si
inc si
inc si
mov ax,si
add ax,si
add ax,si
可以看出,先把i(si)连加三次,然后再得到k.
hoyle
2000-08-16
打赏
举报
回复
根据C/C++的运算符优先级,按照语法树进行分析,
括号的优先级最高,简单加法的优先级最低,
所以程序先计算出括号中的内容,此时i经过两次++运算,变为5
即++5+5+5
再计算++(优先级高于+),这时i为6
即6+6+6
最后计算加法
结果为18
claider
2000-08-16
打赏
举报
回复
吃饱撑着
daiguan
2000-08-16
打赏
举报
回复
如果是在printf中用这个表达式
printf(++i+(++i)+(++i));
你的答案就对了,在赋值表达式中,先进行++操作,函数中从右往左计算。
这可能是c的一个BUG吧!
wxz
2000-08-15
打赏
举报
回复
k=++i+(++i)+(++i); // i=3
1.最后一个(++i) i=4;
2.中间的(++i) i=5;
3.第一个++i; i=6;
k=6+6+6=18
关键在于运算时把同一个单元的值连续做了3个++运算,最后把三个相同的数相加
加载更多回复(2)
C&C
++
语言学习大全套【精品】
2012-C&C
++
语言大全.zip C&C
++
语言教程大礼包.rar C_C
++
+指针的13份资料.zip C_C
++
程序员实用大全.zip C
++
程序设计语言特别版(中文版) .rar
C语言
大全第4版+源码.rar
C语言
阶梯式教程【从白痴到资深专家】 .pdf 你必须知道的495个
C语言
问题
(完整版).rar
C语言
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
C语言
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值 思路分析 首先应该以
一个
循环来进行累加,为累加的值创建
一个
变量sum,用sum保存每次累加的结果,每次循环分母都进行+1操作,其次符号
问题
,应该通过(-1)的多少次方来实现,代码如下 #include <stdio.h> #include <stdlib.h> #include &l...
C语言
程序设计--进阶篇教学视频
该课程为“
C语言
及程序设计”系列课程中的第三部“进阶篇”。作为终结篇
C语言
教程,介绍了在实际应用中应用广泛的结构体数据表示和处理、利用文件进行输入输出、利用多文件组织项目开发,并结合对程序设计的进一步学习需求,概述数据结构及其选择
问题
和
问题
求解方法。以实践为主线的学习将继续,“银行储蓄系统”的开发将会迭代到第5版和第6版。
【
C语言
】一文弄通
++
i,i
++
,i--,--i,解决粉丝疑问
解答来自粉丝对于自增自减运算符的疑惑,一文弄通
++
i,i
++
,i--,--i
使用
C语言
编程求解: 1 - 1/2 + 1/3 - 1/4 + 1/5 - ... + 1/99 - 1/100 的值。
一、题目描述: 使用
C语言
编程求解: 1 - 1/2 + 1/3 - 1/4 + 1/5 - ... + 1/99 - 1/100 的值。 二、分析求解: 这是一道类似数列的求和
问题
,考察的是循环的使用,以及基础的数学知识。 代码如下: #include<stdio.h> int main(){ int sign = 1,deno = 2; float sum = 1.0, term; while(deno<=100){ ...
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章