c语言的自增自减问题

发布时间:2024-05-14 05:16 发布:上海旅游网

问题描述:

c语言中,假设i=5,那么m=++i-i--的值和m=i++-(--i)的值为什么都是0,m=(i++)+(i++)+(i++)的值为什么是15?如何计算出来的?谢谢!
我跟“gkstarmoon”的分析是一样的,这才发现了问题。希望有高手指点迷津。

问题解答:

搞清梦运算符的优先级很重要。。。++在前,高于一切,++在后,只高于逗号运算符。。
m=++i-i--; 先计算++i, i=6; 再m=i-i--=6-6=0; 最后才i--; i=5;
m=i++-(--i) 先计算--i, i=4.再m=4-4=0; 最后 i++; i=5;
m=(i++)+(i++)+(i++), ++都是在后面的,先计算m=5+5+5=15. 再i++三次,i=8。

- -||
在c语言里面这个是不能用的说,是有争议的表达式。
不同的机子,不同的运行环境运算的方向都不一样的,自增自减不知道从哪边开始

在Java里面可以,因为Java的运行默认的从左到右。。
偶是这样理解的

m=++i-i-- ++i=6;++i-i=6-5=1;++i-i--=0

m=i++-(--i)=0 ? 大概是5-(6-1)吧

(i++)+(i++)+(i++)=5+5+5=15

注意:i++表示使用后+1
++i表示使用前+1
i--,--i也是一样的意思

所有回答都是错误的,永远不要做类似的运算,这类运算的结果是不定的。
看看C++之父BS对这个问题是怎么说的http://www.research.att.com/~bs/bs_faq2.html#evaluation-order

++i/--i 的实际操作含义是 先进行i=i+1/i=i-1运算
然后把结果作为表达式 (++i)的替换
而 i++/i-- 则不同
用变量 i 的当前值替换(i++)/(i--)继续进行表达式计算后
对变量 i 进行 i=i+1/i=i-1的运算

拿题来说
第一个表达式 m=(++i)-(i--) i = 5
m=6-(i--) i = 6
m=6-6 i = 5
m=0 i = 5

以此类推
第二个表达式 m=i++-(--i) i = 5
m=5-(--i) i = 6
m=5-5 i = 4
m=0 i = 4

第三个表达式 m=(i++)+(i++)+(i++) i = 5
m=5+(i++)+(i++) i = 6
m=5+6+(i++) i = 7
m=5+6+7 i = 8
m=18 ??

搂主的问题有问题哦~~
第三个表达式搂主写了程序看看吧~

这样说吧,只有++或--在前面的时候计算的时候算+1;
在后面的话计算的时候不管,还是原来的值;算完之后再给+1;
m=(i++)+(i++)+(i++)算的时候i++就是5,所以结果是15;()加了没用的其实。算完后i的值是6;

热点新闻