问题描述:
main(){
int i=8;
printf("%d\n",++i);
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);
}
9
8
8
9
-8
-9
不明白最后的-8 -9怎么来的
其他都知道了……
总之就是自增自减遇到负号就不知道怎么算了
那位大大帮帮忙……
感激不尽……
问题解答:
记住在这里:自减和自加要打印完再自加自减!
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);
执行第一句话时i=9,打印完i再减1,所以执行第二句就是打印-8,这里i再++,就是i=9,执行第三句就是打印-9,i再--,就是i到程序结束之前是8.
你需要知道,后自增操作符优先级非常高,高于前自增操作符和一般的算数运算符。
这样,就是-(i++) 明白了吧~
自增运算符与自增减运算符的优先级都高于一元负号的优先级
所以-i++就相当于是-(i++),即是对i先后自增,然后取它的相反数
printf("%d\n",i--); 这条语句,使得i变为了8,所以执行
printf("%d\n",-i++); 时,先执行i++,i++的值是8,取反,则为-8.后面的同理
但是你要明白,自增是有副作用的,因为i++之后,i的值变为了9,但是i++的值是8
只要记住:前缀加返回自加之后的值,后缀加返回自加之前的值