鱼C论坛

 找回密码
 立即注册
查看: 1885|回复: 6

[已解决]自增自减问题

[复制链接]
发表于 2021-6-24 14:10:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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
求大神解说一下。
       
       
最佳答案
2021-6-24 14:58:51
本帖最后由 连帅帅 于 2021-6-24 15:02 编辑

首先,关于i++和++i的区别看你的意思应该是知道的;
其次,负号,只是代表当前值的正负性,计算的时候还是按不带负号的i++,或者i--来算,算完之后加上个负号,相当于乘以负一,这解释够直观吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-24 14:24:21 | 显示全部楼层
i++赋值后是8再自增1后就是9,printf先把9的值打印出来,i--再自减。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-24 14:27:19 | 显示全部楼层
ifuchuan 发表于 2021-6-24 14:24
i++赋值后是8再自增1后就是9,printf先把9的值打印出来,i--再自减。

前面4个都看得懂 主要是后面这2个 -8到-9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-24 14:30:43 | 显示全部楼层
i-- 是要执行完该条语句后 才会自减一 不是从8变成9 而是执行完这条语句后 才是8 也就是说 执行printf后才会自减1 你可以试试 -i++ 同理 这里“-”被当成负号了 是单目运算符 优先级比++高 拆开后可以这样看printf("%d",-(i=i+1))但是这个自曾也是需要 在执行完这条语句才会自增 也就是说 他现在还是 8 后面才变成9 后面同理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-24 14:58:51 | 显示全部楼层    本楼为最佳答案   
本帖最后由 连帅帅 于 2021-6-24 15:02 编辑

首先,关于i++和++i的区别看你的意思应该是知道的;
其次,负号,只是代表当前值的正负性,计算的时候还是按不带负号的i++,或者i--来算,算完之后加上个负号,相当于乘以负一,这解释够直观吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 14:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表