【问题标题】:How to know a number reach limit integer如何知道一个数字达到限制整数
【发布时间】:2019-12-03 12:17:27
【问题描述】:

假设我们正在处理的环境只能存储 32 位有符号整数范围内的整数:[−231, 231 - 1]。为了解决这个问题,假设你的函数在反转整数溢出时返回 0。

我遇到的问题是如何知道一个数字大于整数范围。 (对不起我的英语)

【问题讨论】:

标签: javascript numbers int


【解决方案1】:

您可以从Signed 32-bit integers 获取值并检查范围。

function getValue(v) {
    return v < -2147483648 || v > 2147483647
        ? 0
        : v;
}

console.log(getValue(1));
console.log(getValue(1e20));

【讨论】:

    【解决方案2】:

    由于 JavaScript 的数字不是整数(并且具有很多更广泛的范围),您只需将结果与所需范围进行比较:

    if (result < -(2**31) || result > (2**31) - 1) {
        // Out of range
    }
    

    ** 是新的求幂运算符。对于较旧的 JavaScript 引擎,您可以改用 -Math.pow(2, 31)Math.pow(2, 31) - 1。当然,也可以提前计算:-2147483648 和 2147483647。)

    或者,假设您的结果不是小数(它是一个整数),您可以让 JavaScript 使用按位运算符将其转换为 32 位有符号整数,并查看您是否仍然有相同的数字:

    if (result !== result|0) {
        // Out of range
    }
    

    这是有效的,因为按位 | 运算符将其两个操作数都转换为 32 位有符号整数,执行按位 OR 运算,然后将结果转换回数字。因此,如果超出范围,您将无法返回相同的数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      相关资源
      最近更新 更多