gpt4 book ai didi

c - 在不使用 If else 的情况下找出两个数字的最大值和最小值?

转载 作者:太空狗 更新时间:2023-10-29 15:12:19 25 4
gpt4 key购买 nike

我能够从中找出逻辑:Here

r = y ^ ((x ^ y) & -(x < y)); // min(x, y)
r = x ^ ((x ^ y) & -(x < y)); // max(x, y)

它说它比做的更快

r = (x < y) ? x : y

有人可以解释更多关于它的例子来理解它吗?怎么可能更快?

最佳答案

在不考虑特定硬件的情况下讨论优化没有任何意义。如果不深入了解特定系统的细节,您真的无法判断哪个替代方案最快。在没有考虑任何特定硬件的情况下大胆声明第一个替代方案是最快的,只是过早的优化。

如果给定 CPU 的性能严重依赖于 branch prediction,则晦涩的异或解决方案可能比比较方案更快.换句话说,如果它执行常规指令(例如算术指令)非常快,但在任何条件语句(例如 if)处遇到性能瓶颈,代码可能会以多种方式分支。其他因素,如指令高速缓存的数量等也很重要。

但是,许多 CPU 会更快地执行第二种选择,因为它涉及的操作更少。

总而言之,您必须是给定 CPU 的专家,才能从理论上实际判断哪种代码最快。如果您不是这样的专家,只需对其进行基准测试并查看。或者查看反汇编以了解显着差异。

关于c - 在不使用 If else 的情况下找出两个数字的最大值和最小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24529504/

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