Solidity
Solidity中的除法下溢或溢出嗎?
我們知道:
- 從 Solidity v0.8 開始,編譯器預設檢查所有算術運算的 {over,under}flow。
- 除法是一種四捨五入到商的整數部分的算術運算。
排除除數為零的情況,是否可能下溢或上溢?
是的,至少有一種情況會發生溢出。不過,我不知道下溢。
當您將有符號類型的最小值除以 -1 時,您會在無符號部分中獲得該數字的鏡像,但無符號類型只會上升到該數字 - 1。
function div_overflow() public pure returns (int16 result) { int16 x = type(int16).min; int16 y = -1; // Overflows because doesn't fit in int16 result = x / y; }
在 Solidity 中,有符號數從 -1 開始,而無符號數從 0 開始。閱讀更多。在 Solidity 文件中閱讀有關二進制補碼的更多資訊。
更新:看起來這是在文件中指定的:
表達式
type(int).min
/ (-1) 是除法導致溢出的唯一情況。在檢查算術模式下,這將導致斷言失敗,而在包裝模式下,該值將為type(int).min
.