https://www.geeksforgeeks.org/compute-the-minimum-or-maximum-max-of-two-integers-without-branching/
我试图找到其他方法来查找两个整数之间的最大值和最小值,并遇到了以下用于该操作的代码。任何人都可以澄清代码中按位运算符的工作和作用:
/*Function to find minimum of x and y*/
int min(int x, int y)
{
return y ^ ((x ^ y) & -(x < y));
}
/*Function to find maximum of x and y*/
int max(int x, int y)
{
return x ^ ((x ^ y) & -(x < y));
}
最佳答案
return y ^ ((x ^ y) & -(x < y));
-(x < y)
如果 x >= y
将为 0如果 x < y
,则为 -1(即设置了所有位的 int) .注意 foo & -1 == foo
和 foo & 0 == 0
对于所有 foo
.所以如果x < y
,我们得到 y ^ x ^ y
, 等于 x
因为y ^ y
取消。否则我们得到 y ^ 0
,即 y
.所以我们得到 x
如果x < y
和 y
否则,这正是您希望从名为 min
的函数中得到的结果.
对于 max
这是一回事,除了我们返回 y
如果x < y
和 x
否则。
关于c - 这个按位表达式如何帮助找到两个整数之间的最小值和最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55242326/