如何在不使用 Math.abs 的情况下获取整数的绝对值?

How do I get the absolute value of an integer without using Math.abs?

如何在不使用的情况下使用math.abs获得数字的绝对值?

这是我目前拥有的:

function absVal(integer) {
    var abs = integer * integer;
    return abs^2;
}

因为一个数的绝对值是"how far the number is from zero",一个负数可以是"flipped"正数(请原谅我缺乏数学术语=P):

var abs = (integer < 0) ? (integer * -1) : integer;

或者,虽然我没有对它进行基准测试,但从零减去而不是乘法可能更快(即 0 - integer)。

我们没有理由不能借Java's implementation

    function myabs(a) {
      return (a <= 0.0) ? 0.0 - a : a;
    }

    console.log(myabs(-9));

工作原理:

  • 如果给定的数字小于或为零
    • 用 0 减去数字,结果总是 > 0
  • 否则 return 数字(因为它是 > 0

检查数字是否小于零!如果是,则将其乘以 -1;

您也可以使用>> (Sign-propagating right shift)

function absVal(integer) {
    return (integer ^ (integer >> 31)) - (integer >> 31);;
}

注意:这仅适用于整数

您可以使用 conditional operator and the unary negation operator:

function absVal(integer) {
  return integer < 0 ? -integer : integer;
}