获得零下限的最有效(最快)方法是什么?
Math.max(0,x)将起作用,对于x的任何负值都返回0。但是,我对Math。*的经验是,通常有更高效的技巧。在这种情况下,任何人都知道吗?
按位技巧很好;我总是喜欢找那些运营商的真正用途。如果x为负数,那么任何返回false的东西都可以。
编辑 为了澄清,如果x大于0,我想要那个值。所以我不能只做x< 0,因为那只会给我真实,而不是x。
答案 0 :(得分:2)
Math.Max(x, y)
基本上与例如x > y ? x : y
。当false
为否定时返回x
应该同样简单:return x < 0 ? false : x
答案 1 :(得分:2)
满足您要求的一种方式是:
x > 0 && x
鉴于当false
为0或为负时,您可以使用表达式评估为x
。如果您只想在false
为否定时x
,则可以执行以下操作:
x >= 0 && x
示例:
3 > 0 && 3; // result: 3
-1 > 0 && -1; // result: false
0 > 0 && 0; // result: false
0 >= 0 && 0; // result: 0
答案 2 :(得分:1)
查看最小/最大的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));
但是,除非你处于紧密循环(例如游戏循环)并且由于Math.max()
而处于执行状态(并且简单的三元内联等效物不能提供所需的性能),否则我不会不要用这个小小的伎俩。对于任何阅读代码的人来说,它的作用并不明显,而且几乎肯定需要一个评论来解释,而Math.max()
在其名称中是自我记录的(对大多数程序员来说)。