mm1mm 发表于 2021-6-24 14:10:07

自增自减问题

本帖最后由 mm1mm 于 2021-6-24 14:22 编辑

        int i;
        i = 8;
        printf("%d\n", ++i); 9
        printf("%d\n", --i);   8
        printf("%d\n", i++); 8
        printf("%d\n", i--);   9
        printf("%d\n", -i++); -8
        printf("%d\n", -i--);   -9


当i为负数的时候 +1也是加的负数嘛?
所以i=-8+-1=-9
求大神解说一下。
       
       

ifuchuan 发表于 2021-6-24 14:24:21

i++赋值后是8再自增1后就是9,printf先把9的值打印出来,i--再自减。

mm1mm 发表于 2021-6-24 14:27:19

ifuchuan 发表于 2021-6-24 14:24
i++赋值后是8再自增1后就是9,printf先把9的值打印出来,i--再自减。

前面4个都看得懂 主要是后面这2个 -8到-9

Aoung 发表于 2021-6-24 14:30:43

i-- 是要执行完该条语句后 才会自减一 不是从8变成9 而是执行完这条语句后 才是8 也就是说 执行printf后才会自减1 你可以试试 -i++ 同理 这里“-”被当成负号了 是单目运算符 优先级比++高 拆开后可以这样看printf("%d",-(i=i+1))但是这个自曾也是需要 在执行完这条语句才会自增 也就是说 他现在还是 8 后面才变成9 后面同理

牧民兰 发表于 2021-6-24 14:34:46

本帖最后由 牧民兰 于 2021-6-24 14:36 编辑

      int i;
      i = 8;
      printf("%d\n", ++i); 9->i=i+1;printf("%d\n", i);
      printf("%d\n", --i);   8   ->i=i-1;printf("%d\n", i);
      printf("%d\n", i++); 8   -> printf("%d\n", i);   i=i+1;
      printf("%d\n", i--);   9   -> printf("%d\n", i);   i=i-1;
      printf("%d\n", -i++); -8   -> printf("%d\n", -i);   i=i+1;
      printf("%d\n", -i--);   -9   -> printf("%d\n", -i);   i=i-1;

连帅帅 发表于 2021-6-24 14:58:51

本帖最后由 连帅帅 于 2021-6-24 15:02 编辑

首先,关于i++和++i的区别看你的意思应该是知道的;
其次,负号,只是代表当前值的正负性,计算的时候还是按不带负号的i++,或者i--来算,算完之后加上个负号,相当于乘以负一,这解释够直观吧{:10_258:}

nahongyan1997 发表于 2021-6-24 15:15:32

真是应了上学时候老师说的那句答案就在问题里,
我给你标记一下你知道程序的执行顺序你一下就明白了:
      int i;
      i = 8;
      printf("%d\n", ++i); 9
      printf("%d\n", --i);   8
      printf("%d\n", i++); 8
      printf("%d\n", i--);   9
      printf("%d\n", -(i++)); -8
      printf("%d\n", -(i--));   -9
页: [1]
查看完整版本: 自增自减问题