刚学C语言,遇到个不懂的地方,请大神指点
#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这个数 先从8变成-8,然后i--变成-9 不妨再打印一下当前的i值,看看结果 你前面的明白应该知道最后第二个 i = 9,因为前面的负号不会影响i本身的,你只是加了负号,没有说 i = -i 是不是,所以 i 的值就是9,最后一行 -i--,很显然自减优先级大,但是 i-- 由于自身算法、、原因是先呈现 i 的值就是9,再加负号,就是-9。
如果懂了麻烦点一下“最佳答案”,不懂点“回复”提问{:10_303:} 楼上已经讲的很清楚了,就不再解释了
对于初学者来说,不要花太长时间纠结这种问题,毫无意义,这样的问题只会出在课后练习题或者考试中,对于实际的工程来说根本不会出现这样的代码,自己容易混淆,别人看你的代码也会很不爽 ++运算符的结合性是从右向左 WP叶超 发表于 2017-10-8 15:39
先从8变成-8,然后i--变成-9
感谢! lizechen 发表于 2017-10-8 20:03
不妨再打印一下当前的i值,看看结果
好办法,谢谢! 丶忘却的年少o 发表于 2017-10-8 20:45
你前面的明白应该知道最后第二个 i = 9,因为前面的负号不会影响i本身的,你只是加了负号,没有说 i = -i...
感谢您码了这么多字。不好意思一直没上论坛,您的意思是前面的正负号不会影响i本身的值,只有自加自减才会改变i的值是吗?也就是说看i的值不需要看正负号,只需要看是自加还是自减就可以了,也就是说最后一行i的值其实是倒数第二行"i++"也就是8+1, 然后再加一个负号得出的-9,是这样的吗?是这样的话那i如果需要变成-的的话以我现在的水平,就需要数次自检才能得到对吗? shuofxz 发表于 2017-10-8 21:32
楼上已经讲的很清楚了,就不再解释了
对于初学者来说,不要花太长时间纠结这种问题,毫无意义,这样的问 ...
好的,感谢您的回复 sunnyday 发表于 2017-10-8 22:42
++运算符的结合性是从右向左
谢谢! duzunchong 发表于 2017-10-10 10:15
感谢您码了这么多字。不好意思一直没上论坛,您的意思是前面的正负号不会影响i本身的值,只有自加自减才 ...
是的,的确不需要看前面的负号,你可以自己定义一个 i = 9,然后先打印下 -i 的值,然后再打印下 i 的值就可以知道了。不过你要变成负的,可以不需要这么做呀,直接在那个打印命令前写一条 i= -i; 让 i 变成负数就好了。版主的意思那也就是少用自增自减去运算多次,一个代码长,一个看去费劲,直接用一条指令实现而且更容易看不是很好吗。自增自减适合与与别的语句结合起来,运算次数少的语句中。否则看去就是太乱。 丶忘却的年少o 发表于 2017-10-10 10:52
是的,的确不需要看前面的负号,你可以自己定义一个 i = 9,然后先打印下 -i 的值,然后再打印下 i 的值 ...
明白了,感谢您的耐心解答 duzunchong 发表于 2017-10-10 11:13
明白了,感谢您的耐心解答
不用客气,我就是喜欢唠叨,哈哈哈{:10_330:} 丶忘却的年少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 y=((x=a+b),(b+c));
改成这样,编程的时候必须要知道优先级的问题,=的优先级大于 , 的优先级,记住,的优先级最小,要想先执行逗号运算符就要加() 丶忘却的年少o 发表于 2017-10-10 19:00
y=((x=a+b),(b+c));
改成这样,编程的时候必须要知道优先级的问题,=的优先级大于 , 的优先级,记住,的优 ...
好的,解释一下瞬间就明白了,谢谢 duzunchong 发表于 2017-10-10 10:16
谢谢!
不用
页:
[1]