2015-01-12 49 views
0

我不知道是否「夾緊」是這個正確的術語,但我真的不知道還有什麼叫它。假設我們想限制一個整數以保持在任意範圍內,比如0-50。這可以通過用if語句測試當前值並相應地分配最大值或最小值來輕鬆實現。但是,將整數保持爲最大值還是最小值的最快方法是什麼?最快的方法來鉗制一個整數

+0

http://stackoverflow.com/a/3176617/442444 – CarbineCoder

+0

如果內置功能是您在C#中尋找鉗位的功能,則可能無法使用該功能。使用這些抽象類可以安全地爲您的目的服務,而不必擔心性能瓶頸。 – CarbineCoder

+0

針對min和/或max的檢查最終通常會「編譯」到CPU上的整數比較和分支指令,該指令大約在5-10個時鐘週期或更短的時間週期內。你爲什麼關心這個級別的時鐘週期。當然,讓代碼易讀並且易於維護,然後使用一些奇特的位移或布爾屏蔽技巧,節省1個時鐘週期就顯得尤爲重要。 –

回答

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,因此它不太可能,你甚至可以更好地實現它。

+0

這是衆所周知的最快?我期待着某種奇特的變化或某種東西。 – Krythic

+4

「最快」相比什麼?對於一切來說,沒有絕對的「最佳解決方案」。 – zerkms

+0

@zerkms - bravo –