C++增目运算符问题

来源:百度知道 编辑:UC知道 时间:2024/06/22 23:36:29
运算程序:
#include <iostream>
using namespace std;
int main()
{
int i=1;
int a,b,c,d;
a=(i++)+(i++);
b=(++i)+(++i);
c=(++i)+(i++);
d=(i++)+(++i);
cout<<a<<endl;
cout<<b<<endl;
cout<<c<<endl;
cout<<d<<endl;
return 0;
}

为什么结果是2,10,12,16;

而这样编写:
#include <iostream>
using namespace std;
int main()
{
int a,b,c,d;
int i=1;
a=(++i)+(++i);
b=(i++)+(i++);
c=(i++)+(++i);
d=(++i)+(i++);
cout<<a<<endl;
cout<<b<<endl;
cout<<c<<endl;
cout<<d<<endl;
return 0;
}
结果又变成了6,6,12,16;

哪位高手给我解解疑惑,i++和++i到底有什么区别,i--和--i呢,也是和前面是一样的区别吗?

i++ 是先取值出来 然后i再自增。++i,是i先自增,然后再取i的值。
i--和--i同理。
以a的数值为例子,
第一个程序,i++先取值再自增,所以a=1+1=2;
第二个程序,++i先自增再取值,算术表达式先做括号运算,所以i先做两次自增到3,然后取值,即a=3+3=6;

i++是先取i的值,再自加。所以a=(i++)+(i++)先取i=1,得a=2, i再自增两次,i=3
++i是先自加再取i的值。所以b=(++i)+(++i);先自增两次i=5,再加得b=10
c=(++i)+(i++);只有一个++i所以自增1,i=6.相加c=12,再自增1,i=7

因为++的优先级高于+。所以先看++后i的值在考虑加法
以此类推。。。