负数转为uint256
在solidity
中将一个负数强制转为uint256
时,solidity会直接将其二进制补码
解释为一个无符号整数
- 例如:
-1
的二进制补码是全 1,转为uint256
后会变成2^256-1
- 将负数-0.008396714242162444 ether,转为
uint256
会得到下面这个非常大的数,实际上是2^256 - 0.008396714242162444 ether
的结果115792089237316195423570985008687907853269984665640564039457584007913129639935
int256 negative_1 = -1;
int256 negative_2 = -0.008396714242162444 ether;
uint256 a = uint256(negative_1);
uint256 b = uint256(negative_2);