递增和递减 i 无法正常工作
本文关键字:常工作 工作 | 更新日期: 2023-09-27 18:34:24
以下两行代码不返回相同的值。有什么原因吗?
int i;
i = 1;
i = i + i++; //Returns 2, expecting 3
和
i = 1;
i = i++ + i; //Returns 3
从语义上讲,这应该是相同的a + b = b + a
吧?
i
也是如此:
i = 1;
i = i - i--; //Returns 0, expecting 1
和
i = 1;
i = i-- - i; //Returns 1, expecting -1
更让我困惑的是帖子增量运算符的使用:
i = 1;
i = i + ++i; //Returns 3
和
i = 1;
i = ++i + i; //Returns 4, expecting 3
与递减运算符相同:
i = 1;
i = i - --i; //Returns 1
和
i = 1;
i = --i - i; //Returns 0, expecting -1
最后一个问题:
编译器如何解释这两行?
i = i+++i; // is it i + ++i or i++ + i?
i = i---i; // is it i - --i or i-- - i?
i = i + i++; //Returns 2, expecting 3
称为岗位增量。值将首先使用,然后递增。它相当于
i = i + i;
i = i+1;
这是预增量。值将首先递增,然后使用。
i = i++ + i; //Returns 3
相当于
i = i+1;
i = i + i;
i= i+++i;//是 i + ++i 还是 i++ + i?
被解释为
i= i + 1; i = i + i;
而这个
i= i---i;//是 i - --i 还是 i-- - i?
被解释为
i= i-1;
i = i-i;
前递增(++i
)和后递增(i++
)之间存在差异。区别在于:
预递增将在使用结果之前添加值。后增量将使用 reslt.。然后添加值。所以,你的第一个例子:
int i;
i = 1;
i = i + i++; // First use equals 1, second use equals one. After this line though
// i equals 2, because of your use of post-increment.
同样,您的第二个示例:
i = 1;
i = i++ + i; // First use is 1. After the first use.. it is incremented..
// The second use it is 2. Therefore, 1 + 2 == 3.
至于你的最后一个问题...为什么不把它放到控制台应用程序中并自己尝试呢?
我认为尝试
理解这一点的最好方法是看看编译器对此有何处理。
有关此案例的概述,请参阅此处
x=i-- - --i;
https://stackoverflow.com/a/8573429/959028
此致敬意
increament 或 decreament 运算符的优先级始终高于算术运算符,如 + - */有关详细信息,请参阅 http://msdn.microsoft.com/en-us/library/
aa691323(v=vs.71).aspx。此外,后缀的increament或decreament运算符的值仅在当前语句之后有效。例如:
i = i + i++ = 1 + 1++ = 1 + 1 = 2; // value of i is effective after increament is done
i = i++ + i = 1++ + 2 = 3; //Next value of i contains updated value i.e. 2
i = i + ++i = 1 + ++1 = 1 + 2 = 3; //Next value of i contains updated value i.e. 2
i = ++i + i = ++1 + i = 2 + 2; //Both value of i contains updated value i.e. 2 because of prefixed operator
i = i+++i = i++ + i;
i = i---i = i-- - i;