这个 i=(j=k)>0; j=i==j; k=!i==++j; 这些怎么算啊?

#include "stdio.h"
void main()
{
int i, j, k=10;

 i=(j=k)>0;

 j=i==j; 

 printf("%2d,%2d",i,j); 

 k=!i==++j; 

 printf("%2d", i, j, k);

}

i=(j=k)>0; 先赋值,j=k=10,然后判断j>0,将判断结果赋值给i。因为10>0,所以i=1
j=i==j;先执行i==j,显然不相等,所以j=0
k=!i==++j,先执行!i,因为i=1,所以!i=0,然后执行++j,因为j=0,所以++j后j为1,因为0!=1,所以k=0

仅供参考,你查一下运算符优先级再确认下:

#include <stdio.h>

int main()
{
    int i, j, k=10;
    
    // 先j=k赋值操作结果为j=10然后10大于0的结果为真,结果赋值给i,所以i等于1 
    i=(j=k)>0;  
    
    // 判断i==j,两者不相等,结果为假,结果赋值给j,j等于0 
    j=i==j;     
    
    printf("%2d,%2d\n",i,j); 
    
    // 先执行!i,上一步i等于1,所以!i等于0,执行++j执行完后j等于1,比较0==1不成立,结果为假,结果赋值给k 所以k=0 
    k=!i==++j;  
    
    printf("%2d,%2d,%2d\n", i, j, k);
}