下面是求两个数中较大者的函数:
int larger(int a,int b)
{
int c=a-b;
int k=c>>31&1;
int max=a-k*c;
return max;
}
要找到三个数中最大的一个,可以这样调用它:
larger(a,larger(b,c));
这是如何工作的?
最佳答案
int c=a-b;
c
如果 a < b
将为负否则它将是积极的。现在负数将设置其最高有效位 (MSB)。
int k=c>>31&1;
此步骤假定 sizeof(int)
是4
字节并提取 c
的 MSB在k
.所以k
是 0
或 1
int max=a-k*c;
替换 c = a-b
在这里我们得到max = a-k*(a-b)
.所以当
k = 0, max = a-0*(a-b)
= a
k = 1, max = a-1*(a-b)
= b
关于algorithm - 这段代码如何在不使用任何比较运算符的情况下找到三个数字中最大的一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8283948/