gpt4 book ai didi

c++ - 如何计算余数有什么不同吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:29:41 24 4
gpt4 key购买 nike

假设 a = 2^kint c = b%aint c = b & (a-1) 在性能或正确性方面有什么区别吗?

最佳答案

对于补码 inta 2 的幂,b % a 等于 b & a-1 当且仅当 b 是非负数或 a 的倍数时。

因此,只有当编译器知道 b 是非负数时,它才能将 b % a 替换为 b & a-1或者知道它是 a 的倍数。 (在后一种情况下,它应该用零替换表达式。)在典型的当前处理器上,AND 和减法指令至少与求余(除法)指令一样快,而且通常更快,所以 b & a-1 是首选,寻求性能的程序员如果知道条件已满足,就应该使用它,除非他们确定编译器将为 b % a 生成 AND 或者他们还需要商 b/a。 (如果需要商,编译器必须生成除法指令,处理器通常会提供余数和商。)

当然,编译器可以通过将b 设为unsigned int 来确保它是非负的。确保编译器知道 a 是 2 的幂更复杂,除非 a 是常量。

关于c++ - 如何计算余数有什么不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56137757/

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