关于C的自增运算符的疑惑

发布时间:2024-11-02 19:18 发布:上海旅游网

问题描述:

#include <iostream>

using namespace std;

int main()
{
int i=10;
cout<<(i&&(i=0)&&(++i))<<'\n'<<i<<endl;
return 0;
}
据我的估计,输出应该是0,1;但为什么输出后i并没有自增,仍然是0呢?
编译器究竟是怎样对“cout<<(i&&(i=0)&&(++i))<<'\n'<<i<<endl;”这条语句进行编译的?
(i&&(i=0)&&(++i))的值为0,这个我知道,但我说的是后面输出的i为1!!

问题解答:

当表达式"i&&(i=0)&&(++i)"运算到i=0时,i=0返回0,那么整个表达式的值为假,++i将不再被计算

(i&&(i=0)&&(++i))的值为0吧??

||是逻辑与运算了
当第一个表达式为真是就不执行后面的
对于表达式"i++ || i++ || i++"
当执行第一个 i++后,其返回值为非0,即整个表达式的值均为真,系统将不再执行后面的运算
若将表达式改为"i++ && i++ && i++"
结果便是1,4

这是一个运算符优先级运算的问题.
因为.(i=0)和(++i)用的括号.
而在C语言里面括号优先级,比逻辑与运算符的优先级高
所以先执行括号里面的命令,再执行与运算.所以i的值会为1一点都不奇怪.

热点新闻