克隆整数的最快方法

时间:2015-01-12 04:35:46

标签: c#

我不确定是否"夹紧"这是正确的术语,但我真的不知道还有什么可以称之为。假设我们想要将整数限制在某个任意范围内,如0-50。这可以通过使用if语句测试当前值并相应地分配最大值或最小值来轻松实现。但是,将整数保持在最大值或最小值的最快方法是什么?

2 个答案:

答案 0 :(得分:4)

一样简单

var normalized = Math.Min(50, Math.Max(0, value));

截至表现:

  public static int Max(int val1, int val2) {
    return (val1>=val2)?val1:val2;
  }

这就是它的implemented in .NET,所以你不太可能更好地实现它。

答案 1 :(得分:0)

如果要提高速度,则应保持CPU的分支预测器满意。因此,使“幸福之路”返回“ n”(调用“钳位”的最可能结果):

public static int Clamp( this int n, int min, int max ) => (n >= min) ? (n <= max) ? n : max : min;

如果编译器是愚蠢的,并且决定为三元数发出次优的IL(我没有检查过),那么您可能必须使用一对if语句重写它,再次保留“ happy path”以返回'n':

public static int Clamp( this int n, int min, int max ) {
    if( value < min ) return min;
    if( value > max ) return max;
    return value;
}