首页 > 用户发贴区 > 编程问题提问区 > 自增自减问题
2009
09-10

请解释一下变量的自增自减问题,谢谢!

 

以下程序的运行结果为:j=9

main()
{int i=1,j;
   j=++i*++i;
   printf(“j=%d”,j);
    }

为什么改成float型后结果就为j=6  ?

 

main()
{float i=1,j;
   j=++i*++i;
   printf(“j=%f”,j);
    }


自增自减问题》有 1 条评论

  1. whos 说:

    对于第一个程序结果 j=9 我想不明白,反汇编下看看到底是什么原因吧
    反汇编的结果如下:
    int i=1,j;
    j=++i*++i;
    对应的汇编代码如下:
    0BBE:01FF BE0100        MOV     SI,0001
    0BBE:0202 46            INC     SI
    0BBE:0203 46            INC     SI
    0BBE:0204 8BC6          MOV     AX,SI
    0BBE:0206 F7E6          MUL     SI
    0BBE:0208 8BF8          MOV     DI,AX

    解释下:
    MOV     SI,0001
    给寄存器SI赋值为1,相当于i=1,这里SI就是存储变量 i 的地方
    INC SI
    把SI加上1,相当于++i
    因为j=++i*++i 中有两个++i,所以INC SI要执行两次就变成3了
    下面要进行乘法运算了
    MOV     AX,SI
    把SI的值3放到另一个寄存器(可以看做其他的变量)中
    MUL     SI
    把SI和AX相乘,其实也就是SI和自己相乘:3*3=9

    分析到这里的话我们就可以看出来表达式 j=(++i)*(++i) 中前后 (++i) 的值应该是相同的,因为 i 只有一个存储空间SI,所以j=(++i)*(++i)可以看成是SI*SI=3*3=9

    改为float型后 j=6 ,呵呵,这个没有分析出来,不过原因可以肯定是int 和 float 数据类型长度不同

    有不对的地方请指出

留下一个回复