2个回答
展开全部
你好,这类问题别人问过我,我贴出来凯余正希望对你有帮助。
=================================================
谁能给我解释几条表达式?
i初始值是3
为什么表达式:
K=(i++)+(i++)+(i++)
的运算结果是:9
K=(++i)+(++i)+(++i)
的运算结果是:18
不明白,第一条表达式我还算有点模糊的理解了一点,但第二条我实在搞不懂:i的初始值是3第一次运算时就变为4吧,第二次运算时i所用的值是哪个?第三次呢?
===============================
答:对于这个表达式怎么编译还没有形成标准,
编译器
的结合方向不同,答案因此会有所不同,VC6.0下第二个表达示的计算结果是16,而有些编译器计算结果是18.
我针对你的答案解释:
1、首先不管是前置++还是后置++,由于++的优先级高于加法运算的+,所以不管怎样在这两个表达式中都会先算++,后再算+,题目中的
运算顺序
写出来就是这样:(++)(++)(++)++=,题目中两个表达式的运算顺序都是这样,注意=号也是个运算。搞清楚了他们的运算顺序再看下面。
2、++这个运算符包含三个运算,即加、赋值、取值。把这三个运算放到整个表达式中。
3、前置++是“先加后取值”,后置++是“先取值后加”,也就是说前置的++和后置的++内部是隐含有优先级的(重点在这里)。怎么理解?
后置++:遇到++时就取值,遇到=号才赋值。这意味着后置++中赋值运算低于表达式中=号运算。题目套用1中的(++)(++)(++)++=
这个运算毁森顺序就是:取i值;取i值;取i值;加法运算;=号运算;赋值(3次i++)。换句话说,不管这类表达式有多长,一句话,先取值,再相加,最后才改变i的值。本题具体就是:3+3+3=k;i=i+1;i=i+1;i=i+1;所以k=9。
前置++:遇到++时就加,紧接着赋值,遇到第一个需要取值的运算符号时就取值。换句话说,不管这类表达式有多长,一句话先加并改变值没商量,再进行算术运算。答案就出来了:++i,++i,++i;取i值;取i值;取i值;加法运算;=号运算;具体就是:i=i+1;i=i+1;
i=i+1;(此时i进行了3次加法,故=6)6+6+6=k
对于第二个表达式,有的
编译器
对表达式按加法顺序运算,结果就是:K=((++i)+(++i))+(++i)
=(5+5)+6=16
了解计算规则后,对象这样的表达式k
=
(i++)
+
(++i)
+
(--i)
+
(i++);也就能算出来了:(原值)+(i+1)+(i-1)+(上一个i-1后的值)=3+4+3+3=13。但有的编译器会采用前置++优先级高于后置++并按加法顺序运算的规则,那么就是这样算:k
=
(i++)
+
(++i)
+
(--i)
+
(i++)=(((i++)+(++i))+(--i))+(i++)+(i++)=(((++i)+(i++))+(--i))盯悔+(++i)=
((4+4)+3)+3=14
不知你看明白没有?可以给我留言,祝你成功!
=================================================
谁能给我解释几条表达式?
i初始值是3
为什么表达式:
K=(i++)+(i++)+(i++)
的运算结果是:9
K=(++i)+(++i)+(++i)
的运算结果是:18
不明白,第一条表达式我还算有点模糊的理解了一点,但第二条我实在搞不懂:i的初始值是3第一次运算时就变为4吧,第二次运算时i所用的值是哪个?第三次呢?
===============================
答:对于这个表达式怎么编译还没有形成标准,
编译器
的结合方向不同,答案因此会有所不同,VC6.0下第二个表达示的计算结果是16,而有些编译器计算结果是18.
我针对你的答案解释:
1、首先不管是前置++还是后置++,由于++的优先级高于加法运算的+,所以不管怎样在这两个表达式中都会先算++,后再算+,题目中的
运算顺序
写出来就是这样:(++)(++)(++)++=,题目中两个表达式的运算顺序都是这样,注意=号也是个运算。搞清楚了他们的运算顺序再看下面。
2、++这个运算符包含三个运算,即加、赋值、取值。把这三个运算放到整个表达式中。
3、前置++是“先加后取值”,后置++是“先取值后加”,也就是说前置的++和后置的++内部是隐含有优先级的(重点在这里)。怎么理解?
后置++:遇到++时就取值,遇到=号才赋值。这意味着后置++中赋值运算低于表达式中=号运算。题目套用1中的(++)(++)(++)++=
这个运算毁森顺序就是:取i值;取i值;取i值;加法运算;=号运算;赋值(3次i++)。换句话说,不管这类表达式有多长,一句话,先取值,再相加,最后才改变i的值。本题具体就是:3+3+3=k;i=i+1;i=i+1;i=i+1;所以k=9。
前置++:遇到++时就加,紧接着赋值,遇到第一个需要取值的运算符号时就取值。换句话说,不管这类表达式有多长,一句话先加并改变值没商量,再进行算术运算。答案就出来了:++i,++i,++i;取i值;取i值;取i值;加法运算;=号运算;具体就是:i=i+1;i=i+1;
i=i+1;(此时i进行了3次加法,故=6)6+6+6=k
对于第二个表达式,有的
编译器
对表达式按加法顺序运算,结果就是:K=((++i)+(++i))+(++i)
=(5+5)+6=16
了解计算规则后,对象这样的表达式k
=
(i++)
+
(++i)
+
(--i)
+
(i++);也就能算出来了:(原值)+(i+1)+(i-1)+(上一个i-1后的值)=3+4+3+3=13。但有的编译器会采用前置++优先级高于后置++并按加法顺序运算的规则,那么就是这样算:k
=
(i++)
+
(++i)
+
(--i)
+
(i++)=(((i++)+(++i))+(--i))+(i++)+(i++)=(((++i)+(i++))+(--i))盯悔+(++i)=
((4+4)+3)+3=14
不知你看明白没有?可以给我留言,祝你成功!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很高兴为您解答!
3个
3个
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询