(x-y)?(x++):(y++)中的(x-y)与(x-y<0||x-y>0)为什么等价)
(x-y<0||x-y>0),显然当x!=y的时候左右必然有一个真,也就是说(x-y<0||x-y>0)其实就是x!=y
而x-y作为bool表达式,其实就是x-y!=0,也就是x!=y
因此两者等价
因为(x-y)?(x++):(y++)中的(x-y)表示的是x和y的大小关系,如果x大于y,则(x-y)的值为正,如果x小于y,则(x-y)的值为负,所以(x-y<0||x-y>0)表示的是x和y的大小关系,所以(x-y)与(x-y<0||x-y>0)等价。
因为x-y<0 或者 x-y>0 意味着,x与y之间存在一个大小关系(无论大于还是小于),所以,(x++):(y++)条件成立,也就是说,(x-y)与(x-y<0||x-y>0)等价。
因为根据布尔运算的逻辑,(x-y<0||x-y>0) 的值只取决于 (x-y) 的符号,而不取决于具体的值。具体而言,当 (x-y) 为正数时,(x-y<0||x-y>0) 的值为真(true),当 (x-y) 为零时,(x-y<0||x-y>0) 的值为假(false),当 (x-y) 为负数时,(x-y<0||x-y>0) 的值为真(true)。因此,两者是等价的。
接下来,我们来看这个表达式 (x-y)?(x++):(y++) 的含义,它的意思是:如果 (x-y) 的值为真(true),那么执行 x++ 并返回 x 的值,否则执行 y++ 并返回 y 的值。它的执行过程分为以下两种情况:
当 (x-y) 的值为真(true)时,先执行 x++,也就是将 x 的值加一,并返回 x 的值。因此,在这种情况下,表达式的值为 x 的值加一。
当 (x-y) 的值为假(false)时,先执行 y++,也就是将 y 的值加一,并返回 y 的值。因此,在这种情况下,表达式的值为 y 的值加一。
综合起来,这个表达式的含义是:如果 (x-y) 的值为真(true),那么返回 x 的值加一,否则返回 y 的值加一。其实这个表达式还可以写成下面这样的形式:
if (x-y) {
x++;
return x;
} else {
y++;
return y;
}
它的逻辑和上面的表达式是等价的,只是写法更加清晰易懂。所以,这个表达式的整体含义和 if else 语句是一样的。
不知道你这个问题是否已经解决, 如果还没有解决的话: