Evm

為什麼乙太坊中沒有位移操作碼?

  • March 23, 2021

為什麼乙太坊中沒有位移操作碼?實施它們的最快和最便宜的方式(就天然氣而言)是什麼?

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,我不完全確定在右移的情況下它將使用哪一個。

引用自:https://ethereum.stackexchange.com/questions/299