gpt4 book ai didi

c++ - 在没有比较运算符的情况下查找 2 个数字之间的最小值

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:01 24 4
gpt4 key购买 nike

我见过下面的方法,它给出了没有关系运算符的最小值 b/w 2 数字

y + ((x - y) & ((x - y) >>(sizeof(int) * CHAR_BIT - 1)))

在这里如果 x=6 和 y=4 x-y=2 是正数并且将这个值向右移动 31 次得到 0。(因为 +ve 数的符号位是 0)并且 eqn 变成

y + ((x-y)&0)

从上面的等式我们得到 y 作为最小值,这是正确的。

但对于 x=4 和 y=6 的情况,x-y=-2 并将其向右移动 31 次得到 1 并且等式变为:

y + ((x-y)&1)

根据我的理解,-2 和 1 的按位 & 变为 0,方程式给出 o/p 为 y(6) 而不是 x(4)。谁能解释一下?

完整代码:https://www.geeksforgeeks.org/compute-the-minimum-or-maximum-max-of-two-integers-without-branching/

谢谢

最佳答案

该网站给出的解释是错误的。当x < y

(x - y) >> 31 = 0b1...1 (32 ones) (*)

然后

y + ((x - y) & 0b1...1) = y + (x - y) = x

(*) 请注意,负数的右移是实现定义的。通常,它执行 arithmetic right shift , 用最高有效位填充所有二进制数字 1对于二进制补码表示中的负数。

关于c++ - 在没有比较运算符的情况下查找 2 个数字之间的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56373754/

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