负数转为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);