鱼C论坛

 找回密码
 立即注册
查看: 2658|回复: 17

[已解决]刚学C语言,遇到个不懂的地方,请大神指点

[复制链接]
发表于 2017-10-8 15:33:13 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

void main()
{
        int i = 8;
        printf("%d\n", ++i);
        printf("%d\n", --i);
        printf("%d\n", i++);
        printf("%d\n", i--);
        printf("%d\n", -i++);
        printf("%d\n", -i--);
}


这个输出的结果是9,8,8,9,-8,-9   前面都没问题,最后一行这个-9怎么看都没懂,输出-8之后不是应该首先算上一行没计算的-8+1,然后再计算-((-8)+1),结果不是应该是7吗?为什么会出现-9这个数
最佳答案
2017-10-8 20:45:24
你前面的明白应该知道最后第二个 i = 9,因为前面的负号不会影响i本身的,你只是加了负号,没有说 i = -i 是不是,所以 i 的值就是9,最后一行 -i--,很显然自减优先级大,但是 i-- 由于自身算法、、原因是先呈现 i 的值就是9,再加负号,就是-9。
如果懂了麻烦点一下“最佳答案”,不懂点“回复”提问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-8 15:39:58 | 显示全部楼层
先从8变成-8,然后i--变成-9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-8 20:03:46 | 显示全部楼层
不妨再打印一下当前的i值,看看结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-8 20:45:24 | 显示全部楼层    本楼为最佳答案   
你前面的明白应该知道最后第二个 i = 9,因为前面的负号不会影响i本身的,你只是加了负号,没有说 i = -i 是不是,所以 i 的值就是9,最后一行 -i--,很显然自减优先级大,但是 i-- 由于自身算法、、原因是先呈现 i 的值就是9,再加负号,就是-9。
如果懂了麻烦点一下“最佳答案”,不懂点“回复”提问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-8 21:32:03 | 显示全部楼层
楼上已经讲的很清楚了,就不再解释了

对于初学者来说,不要花太长时间纠结这种问题,毫无意义,这样的问题只会出在课后练习题或者考试中,对于实际的工程来说根本不会出现这样的代码,自己容易混淆,别人看你的代码也会很不爽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-8 22:42:08 | 显示全部楼层
++运算符的结合性是从右向左
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-10 10:03:11 | 显示全部楼层
WP叶超 发表于 2017-10-8 15:39
先从8变成-8,然后i--变成-9

感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-10 10:03:25 | 显示全部楼层
lizechen 发表于 2017-10-8 20:03
不妨再打印一下当前的i值,看看结果

好办法,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-10 10:15:00 | 显示全部楼层
丶忘却的年少o 发表于 2017-10-8 20:45
你前面的明白应该知道最后第二个 i = 9,因为前面的负号不会影响i本身的,你只是加了负号,没有说 i = -i  ...

感谢您码了这么多字。不好意思一直没上论坛,您的意思是前面的正负号不会影响i本身的值,只有自加自减才会改变i的值是吗?也就是说看i的值不需要看正负号,只需要看是自加还是自减就可以了,也就是说最后一行i的值其实是倒数第二行"i++"也就是8+1, 然后再加一个负号得出的-9,是这样的吗?是这样的话那i如果需要变成-的的话以我现在的水平,就需要数次自检才能得到对吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-10 10:15:30 | 显示全部楼层
shuofxz 发表于 2017-10-8 21:32
楼上已经讲的很清楚了,就不再解释了

对于初学者来说,不要花太长时间纠结这种问题,毫无意义,这样的问 ...

好的,感谢您的回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-10 10:16:07 | 显示全部楼层
sunnyday 发表于 2017-10-8 22:42
++运算符的结合性是从右向左

谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-10 10:52:08 | 显示全部楼层
duzunchong 发表于 2017-10-10 10:15
感谢您码了这么多字。不好意思一直没上论坛,您的意思是前面的正负号不会影响i本身的值,只有自加自减才 ...

是的,的确不需要看前面的负号,你可以自己定义一个 i = 9,然后先打印下 -i 的值,然后再打印下 i 的值就可以知道了。不过你要变成负的,可以不需要这么做呀,直接在那个打印命令前写一条 i= -i; 让 i 变成负数就好了。版主的意思那也就是少用自增自减去运算多次,一个代码长,一个看去费劲,直接用一条指令实现而且更容易看不是很好吗。自增自减适合与与别的语句结合起来,运算次数少的语句中。否则看去就是太乱。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-10 11:13:19 | 显示全部楼层
丶忘却的年少o 发表于 2017-10-10 10:52
是的,的确不需要看前面的负号,你可以自己定义一个 i = 9,然后先打印下 -i 的值,然后再打印下 i 的值 ...

明白了,感谢您的耐心解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-10 11:58:11 | 显示全部楼层
duzunchong 发表于 2017-10-10 11:13
明白了,感谢您的耐心解答

不用客气,我就是喜欢唠叨,哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-10 16:56:58 | 显示全部楼层
丶忘却的年少o 发表于 2017-10-10 11:58
不用客气,我就是喜欢唠叨,哈哈哈

大神麻烦您在帮我看下这个
#include <stdio.h>

void main()
{
        int a=2,b=4,c=6,x,y;
        y=(x=a+b),(b+c);
        printf("y=%d,x=%d",y,x);
}
我看视频上说y的值应该是等于最后一个表达式,也就是b+c,应该等于10啊,可我为什么打印出来是6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-10 19:00:57 | 显示全部楼层
y=((x=a+b),(b+c));
改成这样,编程的时候必须要知道优先级的问题,=的优先级大于 , 的优先级,记住,的优先级最小,要想先执行逗号运算符就要加()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-11 16:12:36 | 显示全部楼层
丶忘却的年少o 发表于 2017-10-10 19:00
y=((x=a+b),(b+c));
改成这样,编程的时候必须要知道优先级的问题,=的优先级大于 , 的优先级,记住,的优 ...

好的,解释一下瞬间就明白了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-29 15:56:39 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-28 18:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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