C语言问题!!!!关于自加和自减运算

发布时间:2024-05-19 14:37 发布:上海旅游网

问题描述:

第一题
int x=y=2,z=3;
y=x++ -1;printf("%d\t %d\t",x,y);
y=++x-1;printf("%d\t %d\t",x,y);
y=z-- +1;printf("%d\t %d\t",z,y);
y=--z+1;printf("%d\t %d\t",z,y);
答案是3 1
4 3
2 4
1 2
这个答案是怎么得到的啊?++(--)和+(-)的优先级哪个高些啊?
第二题(注意运算中的空格,和第一题不一样)
int x=y=2,z=3;
y=x + +-1;printf("%d\t %d\t",x,y); /"+-"是加号和减号连在一起,可能看不清/
y=+ + x-1;printf("%d\t %d\t",x,y);
y=z - -+1;printf("%d\t %d\t",z,y);
y=- -z+1;printf("%d\t %d\t",z,y);
答案是2 1
2 1
3 4
3 4
这个答案又是怎么回事啊。希望讲详细些,谢谢谢谢谢!!!

问题解答:

++优先级比 + 高。。
但是++ 前后是有差别的。
x++ 表示:x先用一次,用了,就变x+1了。
++x 表示:先变x+1,然后再用。

int x=y=2,z=3;
y=x++ -1;printf("%d\t %d\t",x,y);//这里是x后++ y=2-1之后x=2+1;
y=++x-1;printf("%d\t %d\t",x,y);//这里x前++,先x=3+1;再y=4-1;
y=z-- +1;printf("%d\t %d\t",z,y);//这里一样,现y=3+1,再z=3-1;
y=--z+1;printf("%d\t %d\t",z,y); //z=2-1;y=1+1;

=================================================

int x=y=2,z=3;
y=x + +-1;printf("%d\t %d\t",x,y); //"+-"号没有特别意义,这里和分开 + - 是没有区别的都可以看成正负号,相当于y=x + + -1,而这个就相当于y=x-1;
y=+ + x-1;printf("%d\t %d\t",x,y); //这里相当于y=x-1;
y=z - -+1;printf("%d\t %d\t",z,y); //y=z+1
y=- -z+1;printf("%d\t %d\t",z,y); //y=z+1

你再按说明算下结果看看。

记住两句话就好啦 !
1、y=x++是先将x的值赋给y然后自己再自加
2、y=++x是x先自加然后把值赋给y
(--是一样的)
像你看的这几个题很无聊,真正的程序里不会有这样的东西的,也不会有哪个程序员这么写。因为这时候都会用小括号来明确运算的优先级。你现在让我写--和-的优先级我也记不清,因为不根本就不会去记!
不要去深究这样的问题,对你的思维扩展没有什么利的~~
如果你非要明确一下优先级的话就去看一下书好了~~不要在这种小问题上扼杀了自己的程序员之心啊~呵呵

一元运算符的优先一般比二元运算符要高。
空格在这里是没有影响的,因为编译器不可能理解成
(x+)+(-1)或者x+(+-1)这样的形式,只要++或--之间没有空格就可以了
当然 如果是x+++1这样的就很有歧义了 是错误的,不要写

y=x++ -1;printf("%d\t %d\t",x,y);//x=2先参与运算得出y=1后执行x=x+1的操作!!!此时x=3;y=1
y=++x-1;printf("%d\t %d\t",x,y);//x将先自加1(x=4)参与运算后得y=3!!
y=z-- +1;printf("%d\t %d\t",z,y);//这个就同上拉!!
y=--z+1;printf("%d\t %d\t",z,y); //这个也是落!!

第二个:
y=x + +-1;printf("%d\t %d\t",x,y);//就看成是y=x+((+)-)1;负正得负啊!``原式就为y=x-1;
其他的就一样的落!!1

热点新闻