gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:38:32 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com