gpt4 book ai didi

c++ - 无符号整数的快速无分支最大值

转载 作者:可可西里 更新时间:2023-11-01 16:07:28 27 4
gpt4 key购买 nike

我从 AGGREGATE Magic 中找到了一个技巧用于快速计算最大值。唯一的问题是整数,但是我已经尝试了一些东西,不知道如何为无符号整数制作一个版本。

inline int32_t max(int32_t a, int32_t b)
{
return a - ((a-b) & (a-b)>>31);
}

有什么建议吗?

编辑

不要使用它,因为正如其他人所说,它会产生未定义的行为。对于任何现代架构,编译器都能够从 return (a > b) 发出无分支条件移动指令? a : b,这将比所讨论的函数更快。

最佳答案

这段代码有什么作用?它采用 a 的值和差 a - b。当然,a - (a - b) 就是b(a - b) >> 31 只是创建一个掩码,当且仅当 a - b 是负数。

此代码是不正确的,前提是您在减法时出现溢出。然而,这与无符号整数的情况相同。因此,如果您对您的代码在整个值范围内不正确这一事实感到满意,您可以简单地忽略无符号性并使用它:

inline uint32_t umax(uint32_t a, uint32_t b) {
return (uint32_t)max((int32_t)a, (int32_t)b);
}

关于c++ - 无符号整数的快速无分支最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17947718/

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