Evm
為什麼乙太坊中沒有位移操作碼?
為什麼乙太坊中沒有位移操作碼?實施它們的最快和最便宜的方式(就天然氣而言)是什麼?
x >> y = x / 2**y x << y = x * 2**y
我不知道在 EVM 中不包括位移操作碼的原因是什麼,但是(在大多數情況下)它們絕對可以用乘法和除法來模擬。為它們提供專用的操作碼將使它們更快。
- 左移 (
x << y
) 等價於:x * (2 ^ y)
- 右移 (
x >> y
) 等價於:x / (2 ^ y)
(其中
2 ^ y
意味著權力,通常用2 ** y
程式語言編寫。)這些被稱為邏輯移位。對於算術移位,它可以產生與預期不同的結果。
幸運的是,在 EVM 中存在有符號 (
SDIV
) 和無符號除法 (DIV
),因此可以實現這兩種右移情況。如果您正在查看 Solidity,我不完全確定在右移的情況下它將使用哪一個。