Solidity
右移在內聯彙編中不起作用
我在智能合約中進行線上組裝。
function rightShift(uint256 x) public pure returns (uint256 result) { assembly { result := shr(x,1) } }
上面的函式總是返回零。我做錯了什麼還是錯誤?
始終仔細檢查文件。
shr(x, y) 將 y 邏輯右移 x 位
使用您的符號,您實際上是向右移動位
1
。x
對於任何非零值,結果將為零。您可能打算寫:
function rightShift(uint256 x) public pure returns (uint256 result) { assembly { result := shr(1,x) } }
我們來看看Yul 指令的定義:
shr
shr (x, y):邏輯右
y
移位x
您的函式始終返回 0,因為您正在移動
x
(您的變數x
)位,而不是 1 位。為了讓它工作,你必須像這樣重寫它:
function rightShift(uint256 x) public pure returns (uint256 result) { assembly { result := shr(1, x) } }