【发布时间】:2022-04-04 09:14:41
【问题描述】:
我不确定“clamping”是否是正确的术语,但我真的不知道还能怎么称呼它。假设我们想将一个整数限制在某个任意范围内,比如 0-50。这可以通过使用 if 语句测试当前值并相应地分配最大值或最小值来轻松实现。但是,让 Integer 保持最大值或最小值的最快方法是什么?
【问题讨论】:
-
如果一个内置特性是您在 C# 中寻找的钳位,那可能不可用。使用这些抽象来实现您的目的是安全的,而不必担心性能瓶颈。
-
检查最小值和/或最大值最终通常会“编译”为 CPU 上大约 5-10 个时钟周期或更短的整数比较和分支指令。你为什么关心这个级别的时钟周期。当然,让你的代码可读和更容易维护比使用一些花哨的位移位或布尔掩码技巧来节省 1 个时钟周期更为重要。
-
可能重复:已在此处回答:“如何强制数字在 C# 中的范围内?” (stackoverflow.com/questions/3176602/…)。
-
@krythic 你要求的是最快的,而不是“正确”的方式:)