[求助] -i++ 这个表达式的值究竟是怎么算出来的????
在谭浩强老师编写的《C程序设计教程》(请注意是教程,与《C程序设计》那本书不同的)中,在“数据类型、运算符与表达式”这一章中,在讲“自增自减运算符”时,有一段话,颇让我迷惑不解,请高手指点!!书上原话摘录如下(注意:【】中是我添加的,其它的均为书上原句,一个标点符号都没有错。):
++和--的结合方向是“自右至左”,见附录C【即运算符优先级表】。前面已提到,算术运算符的结合方向为“自左而右”,这是大家所熟知的。如果有-i++,i的左面是负号运算符,右面是自加运算符。如果i的原值等于3,若按左结合性,相当于(-i)++,而(-i)++是不合法的,因为对表达式不能进行自加自减运算。
从附录C知道负号运算符“-”和“++”运算符同优先级,而结合方向也都是“自右至左”(右结合性),因此i先与其右的++结合,即它相当于-(i++),如果有printf("%d", -i++),则先取出i的值3,输出-i的值-3,然后i增值为4。注意-(i++)是先用i的原值3加上负号输出-3,再对i加1,不要认为先加完1后再加负号,输出-4,这是不对的。
这段话的意思我感到迷惑,红色字体标识的两句话不是明显的自相矛盾嘛?这是怎么一回事呢?请高手指点一下啊!谢谢!
[此贴子已经被作者于2007-9-7 17:50:44编辑过]