javascript - `Math.trunc` vs `|0` vs `<<0` vs `>>0` vs `&-1` vs `^0`

标签 javascript math bit-manipulation truncated

我刚刚发现在 ES6 中有一个新的数学方法:Math.trunc .

我在 MDN article 中阅读了它的描述。 , 听起来像使用 |0 .

此外,<<0 , >>0 , &-1 , ^0也做类似的事情(感谢@kojiro 和@Bergi)。

经过一些测试,似乎唯一的区别是:

  • Math.trunc返回 -0区间中的数字 (-1,-0] .位运算符返回 0 .
  • Math.trunc返回 NaN与非数字。位运算符返回 0 .

  • 是否有更多差异(在所有差异中)?
    n      | Math.trunc | Bitwise operators
    ----------------------------------------
    42.84  | 42         | 42
    13.37  | 13         | 13
    0.123  | 0          | 0
    0      | 0          | 0
    -0     | -0         | 0
    -0.123 | -0         | 0
    -42.84 | -42        | -42
    NaN    | NaN        | 0
    "foo"  | NaN        | 0
    void(0)| NaN        | 0
    

    最佳答案

    Math.trunc(Math.pow(2,31)) 怎么样与 Math.pow(2,31) | 0
    对有符号的 32 位整数执行按位运算。因此,当您执行 Math.pow(2, 31) 时,您会以“10000000000000000000000000000000”位的形式获得此表示。因为这个数字必须转换为有符号的 32 位形式,所以我们现在在符号位的位置有一个 1。这意味着我们正在查看带符号的 32 位形式的 -eve 数字。然后,当我们对 0 进行按位或运算时,我们会以有符号的 32 位形式得到相同的结果。十进制是-2147483648。

    旁注:在带符号的 32 位形式中,可以用二进制表示的小数范围是 [10000000000000000000000000000000, 0111111111111111111111111111111]。在十进制(以 10 为底)中,此范围为 [-2147483648, 2147483647]。

    关于javascript - `Math.trunc` vs `|0` vs `<<0` vs `>>0` vs `&-1` vs `^0`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156688/

    相关文章:

    javascript - 浏览器如何获取源 map ?

    javascript - HTML 使用按钮确认选择

    php - 生成随机曲线

    c++ - 将特定位置的位收集成一个新值

    javascript - SHA-3 的所有舍入常数究竟是如何生成的?

    php - 使用 PHP 将照片 URL 发送到 JavaScript

    javascript - 样式不会传递给自定义组件 React Native

    javascript - Circle : get max (x, y) 边界坐标

    Java程序错误,将华氏度转换为摄氏度

    有符号数的 Golang 左移/右移行为