使用异或运算和与运算求取二者最大值和最小值(不使用判断语句求二者最小值)

(y^(x^y)&-(x<y))求取二者的最小值

        如果x<y;则根据运算规则有,-(x<y)为-1,计算机中都是用补码表示数字的,所以计算机中-1表示为全1;所以在下一步的运算中(x^y)&-(x<y)得到的结果为(x^y);之后y^(x^y),根据异或运算的交换略,y^y^x结果为x;

        如果x>y;则根据运算规则有,-(x<y)为0,计算机中补码表示也是全为0,所以(x^y)&-(x<y)得到的结果为0,之后y^0为y;

综上所述,所以这个式子返回的是x和y的最小值。

(x^(x^y)&-(x<y))求取二者的最大值

经过以上的分析,我们可以很快推导出使用这些位运算计算二者最大值的方法,即(y^(x^y)&(x<y-1))或者(x^(x^y)&-(x<y));具体的推导过程和上面的一样。

原文地址:https://www.cnblogs.com/dapaitou2006/p/6627045.html