为什么:Math.floor(2e + 21)!= ~~(2e + 21)

亚力山大

我不是位运算符的专家,但我经常看到一种模式,该模式在比赛中被256k演示的程序员使用。代替使用Math.floor()函数,使用双按位NOT运算符~~(可能更快?)。

像这样:

Math.floor(2.1); // 2
~~2.1 // 2

搜索显示,还有更多使用相同方式的模式:

2.1 | 0  // 2
2.1 >> 0 // 2

在开发控制台中使用此功能时,我注意到我不确定自己是否完全了解这种行为。

Math.floor(2e+21);  // 2e+21
~~2e+21;    // -1119879168
2e+21 | 0;  // -1119879168

幕后发生了什么?

埃文·M

正如Felix King指出的那样,数字正在转换为32位带符号整数。2e9小于一个有符号的int的最大正值,因此可以这样做:

~~(2e9)  //2000000000

但是当您转到2e10时,它不能使用所有位,因此它只占用最低的32位并将其转换为int:

~~(2e10) //-1474836480

您可以通过使用另一个按位运算符并确认它正在获取最低的32位来验证这一点:

2e10 & 0xFFFFFFFF // also -1474836480
~~(2e10 & 0xFFFFFFFF) // also -1474836480

Math.floor是为处理大量数字而构建的,因此,如果在较大范围内的准确性很重要,则应使用它。

还要注意:~~正在截断,这与仅对正数的底数相同。它不适用于底片:

Math.floor(-2.1) // -3
~~(-2.1) // -2

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么 ~-(2 + "2") 是 21?

来自分类Dev

为什么变量 all 给 21?

来自分类Dev

均值(c(1,2,21))和均值(1,2,21)之间的差异

来自分类Dev

重新启动后2e显示消失

来自分类Dev

什么是CA21A电缆?

来自分类Dev

HEAD现在位于9e52a21

来自分类Dev

HEAD现在位于9e52a21

来自分类Dev

索尼 Vaio VPCY 21S1E 上的 Ubuntu

来自分类Dev

在计算1.0E21和1.0E23的平方根时,为什么Newton-Raphson方法不能收敛?

来自分类Dev

在计算1.0E21和1.0E23的平方根时,为什么Newton-Raphson方法不能收敛?

来自分类Dev

Android API 21+ Camera2 API

来自分类Dev

无法在 Android < 21 中使用 Retrofit 2 连接到 HTTPS

来自分类Dev

UEFI TGC2 的 sendCommand 总是返回错误 21

来自分类Dev

为什么printf(“-%d”,025); 打印-21?(C)

来自分类Dev

“ 192.168.1.1/21”是什么意思?

来自分类Dev

在Python中将2e + 18转换为2x10 ^ 18

来自分类Dev

在Matlab中生成g(x)= 2e ^(-2x)

来自分类Dev

火鸟连接DB_E_ERRORSOCCURRED(0x80040E21)

来自分类Dev

图遍历中BFS的最差时间复杂度是n + 2E吗?

来自分类Dev

Wifi无法在Acer-Aspire E 15上使用(Ubuntu 16.04,内核:4.4.0-21-generic)

来自分类Dev

bash sed: -e expression #1, char 21: `s' 命令的数字选项不能为零

来自分类Dev

使用int 21h,2Ch显示系统时间

来自分类Dev

拨出时星号和A2Billing“ q931_disconnect_code_21”错误

来自分类Dev

libgit2引发了一个错误。类别= 21(MergeConflict)

来自分类Dev

Apple的3/29/21 HTTP / 2证书更改需要哪些根CA证书?

来自分类Dev

拨出时星号和A2Billing“ q931_disconnect_code_21”错误

来自分类Dev

数据截断:错误的日期时间值:'04 / 10/2014 2:21 PM'

来自分类Dev

SDL2在Fedora 21中调整越野车的尺寸,但在Windows中很好

来自分类Dev

如何在 Python2 中遍历 \u2190-\u21FF 的范围

Related 相关文章

  1. 1

    为什么 ~-(2 + "2") 是 21?

  2. 2

    为什么变量 all 给 21?

  3. 3

    均值(c(1,2,21))和均值(1,2,21)之间的差异

  4. 4

    重新启动后2e显示消失

  5. 5

    什么是CA21A电缆?

  6. 6

    HEAD现在位于9e52a21

  7. 7

    HEAD现在位于9e52a21

  8. 8

    索尼 Vaio VPCY 21S1E 上的 Ubuntu

  9. 9

    在计算1.0E21和1.0E23的平方根时,为什么Newton-Raphson方法不能收敛?

  10. 10

    在计算1.0E21和1.0E23的平方根时,为什么Newton-Raphson方法不能收敛?

  11. 11

    Android API 21+ Camera2 API

  12. 12

    无法在 Android < 21 中使用 Retrofit 2 连接到 HTTPS

  13. 13

    UEFI TGC2 的 sendCommand 总是返回错误 21

  14. 14

    为什么printf(“-%d”,025); 打印-21?(C)

  15. 15

    “ 192.168.1.1/21”是什么意思?

  16. 16

    在Python中将2e + 18转换为2x10 ^ 18

  17. 17

    在Matlab中生成g(x)= 2e ^(-2x)

  18. 18

    火鸟连接DB_E_ERRORSOCCURRED(0x80040E21)

  19. 19

    图遍历中BFS的最差时间复杂度是n + 2E吗?

  20. 20

    Wifi无法在Acer-Aspire E 15上使用(Ubuntu 16.04,内核:4.4.0-21-generic)

  21. 21

    bash sed: -e expression #1, char 21: `s' 命令的数字选项不能为零

  22. 22

    使用int 21h,2Ch显示系统时间

  23. 23

    拨出时星号和A2Billing“ q931_disconnect_code_21”错误

  24. 24

    libgit2引发了一个错误。类别= 21(MergeConflict)

  25. 25

    Apple的3/29/21 HTTP / 2证书更改需要哪些根CA证书?

  26. 26

    拨出时星号和A2Billing“ q931_disconnect_code_21”错误

  27. 27

    数据截断:错误的日期时间值:'04 / 10/2014 2:21 PM'

  28. 28

    SDL2在Fedora 21中调整越野车的尺寸,但在Windows中很好

  29. 29

    如何在 Python2 中遍历 \u2190-\u21FF 的范围

热门标签

归档