main()
{
int i=3,j,m,n;
m=i++*++i;
n=i--*--i;
j=(i++*++i)+(i--*--i);
printf("\n%d %d %d",m,n,j);
getch();
return 0;
}为什么程序的结果是16 16 18?
难道16+16=18不成?
这是为什么阿
{
int i=3,j,m,n;
m=i++*++i;
n=i--*--i;
j=(i++*++i)+(i--*--i);
printf("\n%d %d %d",m,n,j);
getch();
return 0;
}为什么程序的结果是16 16 18?
难道16+16=18不成?
这是为什么阿
按微软编译的汇编来看
m= i++*++i;//i用寄存器的,先自加,再乘是16
j= i++*++i+(i--*--i);//i同样是寄存器,整个运算被这样执行的,先,++i = 4,然后--i = 3,然后,3*3 = 9
然后9+9 = 18
然后,i++, i --
自己看微软的编译汇编就知道了,当然如果是别的编译器,结果不同的
这种写法是要被正规公司辞退的
++i;
--i;
i*i + i * i;
i++;
i--;
得到的汇编是一模一样;