algorithm - 这段代码如何在不使用任何比较运算符的情况下找到三个数字中最大的一个?

标签 algorithm

下面是求两个数中较大者的函数:

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 .所以k01

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/

相关文章:

java - 给定一组区间,找出有多少区间包含一个点

algorithm - 用于检查与原始文件的接近度的 Anagram 算法

c++ - AES 加密/解密文本

algorithm - 通过 DP 最大化给定股票数据的利润

c++ - 快速 n 为大 n 选择 k mod p?

arrays - 在数组中找到一个非重复元素?

algorithm - QuickSort对递归深度的估计

javascript - 使用三 Angular 函数通过圆绘制等距平行线

algorithm - 修改具有边权重和距离的欧几里德图的星形路由

iphone - 如何在 iPhone 上使用 cocos2d 处理环绕的游戏世界