Assembly
如何在yul中分配負數?
拿這個程式碼片段:
function powOfTen(uint256 x) internal pure returns (int256 result) { assembly { switch x case 1 { result := -18 } } }
哪個不編譯:
ParserError: Literal or identifier expected. --> contracts/PRBMath.sol:352:32: | 352 | case 1 { result := -18 } |
如何在 yul 中分配負數?
那是因為你需要使用二進制補碼表示來在 yul 中使用有符號整數,因為這是 EVM 理解它們的方式:
在 Solidity 文件中有一些關於 Two’s Complement 的評論:
所以,解決你的疑問:
-15
表示為:0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1
-3
表示為:0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd
function powOfTen(uint256 x) public pure returns (int256 result) { assembly { switch x case 1 { result := 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1 } case 2 { result := 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd } } }
如果您想在 Remix 上對其進行測試,我已將該功能從 修改為
internal
。public