取下面的代码片段:
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中?
发布于 2021-03-30 16:41:09
这是因为您需要使用二补表示来使用yul中的带符号整数,因为EVM就是这样理解它们的:
关于稳健文档中的两个补充,有一些评论:
所以,解决你的疑问:
-15表示为:0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1
-3表示为:0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd
function powOfTen(uint256 x) public pure returns (int256 result) {
assembly {
switch x
case 1 { result := 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1 }
case 2 { result := 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd }
}
}我已经将函数从internal修改为public,如果您想在Remix上测试它的话。
https://ethereum.stackexchange.com/questions/96426
复制相似问题