将数字转换为1或-1有一个简单的技巧。 把它提高到0的幂。 所以:
4^0 = 1
-4^0 = -1
然而,在AS3中:
Math.pow( 4, 0); // = 1
Math.pow(-4, 0); // = 1
有没有办法在没有if的情况下得到正确答案?
答案 0 :(得分:3)
这可以按位完成。
给定数字 n (平均时间:0.0065ms):
1 + 2 * (n >> 31);
或略慢(平均时间:0.0095ms):
(n < 0 && -1) || 1;
然而,Marty的解决方案是最快的(平均时间:0.0055ms)
n < 0 ? -1 : 1;
答案 1 :(得分:2)
不确定没有if / else 是否包含您眼中的三元运算符,但如果没有:
// Where x is your input.
var r:int = x < 0 ? -1 : 1;
无论如何都会比Math.pow()
更有效率。