这个输出为什么是5呢

不懂哎

#include<bits/stdc++.h>
using namespace std;
int main(){
int i = 1;
int j = i++;
if((i>j++) && (i++ == j)) i+=j;
printf("%d",i);
}


#include<bits/stdc++.h>
using namespace std;
int main(){
int i = 1;
int j = i++;
cout<<i<<'\t'<<j<<'\n';
if((i>j++) && (i++ == j)) i+=j;
cout<<i<<'\t'<<j<<'\n';
return 0;
}

这么看过程就会清晰很多,输出结果如下:

img

  1. 我们先看3、4行。首先定义了"i=1,j=i++",因为这里的“++”为后置,所以先执行j=i语句,后执行i++语句。于是i=2,j=1。
  2. 然后看"i>j++"这句。因为“++”后置,所以先判断i>j语句,后执行j++语句。如第一点所说,此时i=2,j=1,因此i>j成立,且j由1变为了2。
  3. 再看"i++ == j"这句。因为“++”后置,所以先判断i==j语句,后执行i++语句。如第二点所说,此时i=2,j=2,因此i==j成立,且i由2变为了3。
  4. 最后由于两个判断语句都成立,所以执行i+=j语句。此时i=3,j=2,所以i=i+j=3+2=5.结果输出i为5。
    望题主采纳呀~

后加加吗,优先级是最后的,第五行j先等于1,之后i变成了2,先判断i(2)大于j(1),之后j变成了2,前一个条件成立,那么还需要判断后一个,然后i(2)等于j(2),i变成3,条件成立,i(3)+j(2),我觉得是这样