2017qq微店怎么开:t=++x||--y;看不懂!

来源:百度文库 编辑:神马品牌网 时间:2024/03/29 08:22:11
设x,y,t均为int型变量,则执行语句:x=y=3;t=++x||--y;后y的值为( )

A、4
B、3
C、2
D、1

上面的表达式看不懂啊!分析一下!谢谢!

3,因为t=++x||--y;的意思是把++x的值或--y的值赋给t,那么这里先执行++x,若x为真(也就是非零),则将++x的值赋给t,然后直接进行下一步操作;若++x为假(就是为零)则执行--y,将--y的值赋给t

t=++x||--y

x=4
y=3
t=1

分析:
t是int 所以t要么是0要么是1,因为||运算的结果只有这2个.
||运算的特性:先检查++x是否非0,如果是非0则直接赋值t=1,因为不管--y是什么,t都可以保证是真,所以程序忽略计算--y,同样道理,如果换做&&,则如果判断前面是假,就会直接返回假而不计算后面,因为后面不论是什么结果都是假.
从上面得知:--y其实没有计算,所以y=3,而++x计算过了所以x=4.由于++x的表达式值是4非0,所以t=1
上面关于||和&&的优化适用于符合C99的所有编译器.

先把3赋值给y,再把y的值赋给x,然把把x的值加1后赋给t,同时y自减1
所以y值为2

这个主要看你用什么编译器了,不同的编译器的执行顺序不一样,所以答案会有所出入,你自己最好试下
void main(void)
{int t,x,y;
x=y=3;
t=++x||--y;
printf("/nt= %d/t x= %d/t y=%d/n",t,x,y);
}
你可以在BC VC TC GCC等等下分别试下,就知道了

要看具体的环境,
有两种结果,
一个是2,++x||--y是一个布尔值,如果编译器从右到左进行编译的话就会先将y自减。结果就为2了。
另一个是3,这个就很简单了吧。在turboc2.0中的结果是3,因为turboc2.0的编译器是从左向右进行编译的。

3