Solidity

Solidity中的除法下溢或溢出嗎?

  • May 4, 2021

我們知道:

  1. 從 Solidity v0.8 開始,編譯器預設檢查所有算術運算的 {over,under}flow。
  2. 除法是一種四捨五入到商的整數部分的算術運算。

排除除數為零的情況,是否可能下溢或上溢?

是的,至少有一種情況會發生溢出。不過,我不知道下溢。

當您將有符號類型的最小值除以 -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.

引用自:https://ethereum.stackexchange.com/questions/96482