我在 python 和 lua 中嘗試了左移,但得到了不同的結果
lua
print(bit.lshift(1, 40)) --> 256
Python
1 << 40 --> 1099511627776
uj5u.com熱心網友回復:
那是因為bit.lshift使用 32 位(假設這是bitop在 PUC Lua 5.1 / LuaJIT 下運行的庫):
需要定義在所有平臺上都作業相同的語意。這表明所有操作都基于 32 位整數的公分母。(https://bitop.luajit.org/semantics.html#range)
所以它環繞在2^32從而產生結果2^(40-32) = 2^8 = 256。
而 Python 使用 bigint:
$ python3
Python 3.8.10 (default, Mar 15 2022, 12:22:08)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 << 128
340282366920938463463374607431768211456
>>> 1 << 256
115792089237316195423570985008687907853269984665640564039457584007913129639936
(這些數字遠遠超過 64 位整數)
在 5.3 之后的 Lua 版本中,有 64 位有符號整數型別,你會得到相同的結果:
$ lua
Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio
> 1 << 40
1099511627776
5.1 中的解決方法:只需乘以2^40而不是移位:
$ lua5.1
> =2^40
1099511627776
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/471330.html
上一篇:如何在每個結果的不同概率滿足標準之前找到n次平均試驗次數?
下一篇:撰寫一個函式來計算閾值
