(x-y)?(x++):(y++)中的(x-y)与(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<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 语句是一样的。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^