[英]Javascript: what is the most efficient way to get a lower bound of zero?
獲得下限零的最有效(最快)方法是什么?
Math.max(0,x)將起作用,對於x的任何負值返回0。 但是,我對Math。*的經驗是,通常會有更多性能更高的技巧來更快地完成它。 在這種情況下有人知道嗎?
按位技巧很好; 我一直喜歡為那些運營商找到真正的用途。 如果x為負數,則任何返回false的東西也可以。
編輯要澄清,如果x大於0,我想要該值。 所以我不能只做x <0,因為那只會給我真,而不是x。
Math.Max(x, y)
與例如x > y ? x : y
基本相同x > y ? x : y
x > y ? x : y
。 當x
為負數時返回false
應該同樣簡單: return x < 0 ? false : x
return x < 0 ? false : x
一種滿足您要求的方法是:
x > 0 && x
假設您可以接受當x
為0或負數時表達式為false
情況。 如果在x
為負數時只想返回false
,則可以執行以下操作:
x >= 0 && x
例子:
3 > 0 && 3; // result: 3
-1 > 0 && -1; // result: false
0 > 0 && 0; // result: false
0 >= 0 && 0; // result: 0
在最小/最大上查看“ Bit Twiddling Hacks”部分。
這是他們在C中的示例...
int x; // we want to find the maximum of x and y
int y;
int r; // the result goes here
r = x ^ ((x ^ y) & -(x < y));
適應JavaScript很簡單...
var x, y, r;
r = x ^ ((x ^ y) & -(x < y));
jsFiddle 。
但是,除非您處於緊密循環(例如游戲循環)並且由於Math.max()
導致其性能不佳(並且簡單的三元內聯等效項無法提供所需的性能),否則我不會使用這個擺弄技巧。 對於任何閱讀代碼的人來說,這不是很明顯,它幾乎肯定需要注釋來解釋,而Math.max()
是以其名稱(對大多數程序員)是自記錄的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.