逛知乎的時候看到一個C語言技巧的答案嚼摩,覺得他的代碼寫得挺有意思,就想用C#試試矿瘦。
如果我們要判斷一個值在不在范圍內(nèi)枕面,通常都是:
if (x >= min && x < max)
{
return true;
}
return false;
image.gif
想了一下,在實際情況中缚去,好像確實沒有用到已知函數(shù)直接判斷膊畴,都是寫的If判斷。
1病游、如果 int 檢測是 大于等于0, 小于等于max 的話唇跨,可以直接使用uint來判斷:
if ((uint)x < max)
{
return true;
}
return false;
image.gif
這個很好理解稠通,如果x是一個負(fù)數(shù),那轉(zhuǎn)成uint越界买猖,變成一個很大的正數(shù)改橘。
2、如果int檢查的最小值不是0玉控,可以用位運算來判斷:
if (((x - min) | (max - x)) > 0)
{
return true;
}
return false;
image.gif
第一個 (x - minx) 如果 x < minx 的話飞主,得到的結(jié)果 < 0 ,即高位為 1高诺,第二個判斷同理碌识,如果超過范圍,高位也為 1虱而,兩個條件進(jìn)行比特或運算以后筏餐,只有兩個高位都是 0 ,結(jié)果才會大于等于0牡拇。
在C#上驗證了一下魁瞪,覺得這個方法可行。至于性能什么的惠呼,沒有去一一驗證导俘,總感覺這樣寫的人要帥些。