社区
C语言
帖子详情
一个关于c语言的++,--的问题
SeekInRain
2000-08-14 11:44:00
int i=3,k;
k=++i+(++i)+(++i);
小弟算来算去总是15,但结果应该是18, 请高手详细分析一下吧!!!!!1 小菜鸟感激不尽!!!!!!!!!!
...全文
436
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 ...你必须知道的495个
C语言
问题
(完整版).rar
C语言
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
首先应该以一个循环来进行累加,为累加的值创建一个变量sum,用sum保存每次累加的结果,每次循环分母都进行+1操作,其次符号
问题
,应该通过(-1)的多少次方来实现,代码如下 #include <stdio.h> #include <...
使用
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 的值。 二、分析求解: 这是一道类似数列的求和
问题
,考察的是循环的使用,以及基础的数学知识。 代码如下: #...
i++、i
--
与++i、
--
i的区别
i++或++i单独作为一个语句,此时上下两个语句效果是相同的,都是自增1 #include int main(int argc, char* argv[]) { int i = 0; i++; printf("i:%d\n", i); ++i; printf("i:%d\n", i); return 0; } 运行结果 i:...
【
C语言
】一文弄通++i,i++,i
--
,
--
i,解决粉丝疑问
前言 前两天粉丝问了我个
问题
,关于i++,++i,
--
i,i
--
的
问题
,一下子让我想起了自己初学
C语言
被这个加加减减运算符支配的恐惧。 不过当时好像是为了考计算机二级,面对了这些变态的题。 我:???大意了呀,万万没...
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章