关于VC++的一个问题?

来源:百度知道 编辑:UC知道 时间:2024/05/25 07:01:22
执行下列语句后,为什么x=2,y=1?
int x,y;
x=y=1;++x||++y;

望高手解答,万分感谢!

要深入了解“||”
这个东西是逻辑运算符
当前后两个语句都是假的时候才输出假
也就是说只要有一个为真,就输出真
而c对逻辑运算符的顺序是自左向右的,
你的例子中++x的值为2
代表真
这时c将直接判定“++x||++y”的结果为真,
也就是说
系统只计算了++x
这时初学者常犯的错误,以后要注意c中有很多这样的的运算符都是用以产生这样错误的,尤其是“||”和“&&”比如
int x,y;
x=y=1;--x&&--y;
你会发现x=0,y=1;

1: x = 1; y = 1;
2: ++x -> x = 2;
3: 因为x = 2 > 0 ,所以为真, || 后面的不再计算,(这就是短路逻辑)
所以: y= 1;

首先要知道编译器是如何编译的

我们知道逻辑表达式最基本的有 and or not (&& || !)
A and B (A && B)
如果 A 已经是 0 的话,表达式一定是 0, 所以编译就不管后面的了
如果 A 是 1,表达式就得依赖 B 的值,也就是还会计算 B 的值
A or B (A || B)
如果 A 已经是 1 的话,表达式一定是 1, 所以就不用管B的值

所以计算 ++x || ++y 这个表达式时,
编译计算 ++x 的值,这里 x = 1, ++x 后 x = 2, 2 是一个真值,所以 ++x || ++y 一定为真,所以编译器就没有计算后面的表达式,
也就是没有执行 ++y 这个操作,

所以 结果就是 x = 2, y = 1