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不成?
这是为什么阿

解决方案 »

  1.   

    楼主写法不对的,这个和编译器有关的,
    按微软编译的汇编来看
    m= i++*++i;//i用寄存器的,先自加,再乘是16
    j= i++*++i+(i--*--i);//i同样是寄存器,整个运算被这样执行的,先,++i = 4,然后--i = 3,然后,3*3 = 9
    然后9+9 = 18
    然后,i++, i --
    自己看微软的编译汇编就知道了,当然如果是别的编译器,结果不同的
    这种写法是要被正规公司辞退的
      

  2.   

    形式的简单不等于是汇编的简单,按VC编译的,楼主的第四行和
    ++i;
    --i;
    i*i + i * i;
    i++;
    i--;
    得到的汇编是一模一样;