整數(shù)

2022-05-11 18:06 更新

int/ uint:各種大小的有符號和無符號整數(shù)。關鍵字uint8to uint256(8無符號 8 到 256 位)和int8to int256。uint和分別是和int的別名。uint256int256

運營商:

  • 比較:<=, <, ==, !=, >=, >(計算為bool)
  • 位運算符:&, |, ^(按位異或),~(按位否定)
  • 移位運算符:(<<左移)、>>(右移)
  • 算術運算符:+, -, 一元-(僅適用于有符號整數(shù)), *, /, %(模), **(冪)

對于整數(shù)類型X,您可以使用type(X).min和type(X).max訪問該類型可表示的最小值和最大值。

警告

Solidity 中的整數(shù)被限制在一定范圍內。例如,使用uint32,這0取決于。對這些類型執(zhí)行算術運算有兩種模式:“包裝”或“未檢查”模式和“已檢查”模式。默認情況下,算術始終是“檢查”的,這意味著如果操作的結果超出類型的值范圍,則調用將通過失敗的斷言恢復。您可以使用 切換到“未選中”模式。更多細節(jié)可以在關于 unchecked的部分中找到。2**32 - 1 unchecked { ... }

比較

比較的值是通過比較整數(shù)值獲得的值。

位操作

對數(shù)字的二進制補碼表示執(zhí)行位運算。這意味著,例如.~int256(0) == int256(-1)

轉移

移位操作的結果具有左操作數(shù)的類型,截斷結果以匹配類型。右操作數(shù)必須是無符號類型,嘗試按有符號類型移位會產生編譯錯誤。

可以通過以下方式使用乘以 2 的冪來“模擬”移位。請注意,對左操作數(shù)類型的截斷總是在最后執(zhí)行,但沒有明確提及。

  • x << y等價于數(shù)學表達式。x * 2**y

  • x >> y等價于數(shù)學表達式,向負無窮舍入。x / 2**y

警告

在該版本之前,負數(shù)0.5.0右移相當于向零舍入的數(shù)學表達式,即,使用向上舍入(向零)而不是向下舍入(向負無窮大)進行右移。x >> yxx / 2**y

筆記

移位操作永遠不會像算術運算那樣執(zhí)行溢出檢查。相反,結果總是被截斷。

加法、減法和乘法

加法、減法和乘法具有通常的語義,在上溢和下溢方面有兩種不同的模式:

默認情況下,檢查所有算術是否不足或溢出,但可以使用unchecked block禁用此功能,從而導致算術包裝??梢栽谠摬糠种姓业礁嘣敿毿畔ⅰ?/p>

該表達式-x等價于where is 的類型。它只能應用于簽名類型。如果為負,則的值可以為正。二進制補碼表示還有另一個警告:(T(0) - x)Tx-xx

如果有,則不適合正值范圍。這意味著有效,并且在檢查模式下使用表達式 將導致斷言失敗。int x = type(int).min;-xunchecked { assert(-x == x); }-x

分配

由于運算結果的類型始終是操作數(shù)之一的類型,因此整數(shù)除法始終產生整數(shù)。在 Solidity 中,除法向零舍入。這意味著.int256(-5) / int256(2) == int256(-2)

請注意,相比之下,文字除法會產生任意精度的小數(shù)值。

筆記

除以零會導致Panic 錯誤無法通過 禁用此檢查。unchecked { ... }

筆記

該表達式是除法導致溢出的唯一情況。在檢查算術模式下,這將導致斷言失敗,而在包裝模式下,該值將為.type(int).min / (-1)type(int).min

模數(shù)

模運算產生操作數(shù) 除以操作數(shù)后的余數(shù),其中和。這意味著模運算的結果與其左操作數(shù)(或零)相同,并且對負數(shù)成立:a % nranq = int(a / n)r = a - (n * q)a % n == -(-a % n)a

  • int256(5) % int256(2) == int256(1)

  • int256(5) % int256(-2) == int256(1)

  • int256(-5) % int256(2) == int256(-1)

  • int256(-5) % int256(-2) == int256(-1)

筆記

帶零的模會導致恐慌錯誤。無法通過 禁用此檢查。unchecked { ... }

求冪

求冪僅適用于指數(shù)中的無符號類型。求冪的結果類型始終等于基數(shù)的類型。請注意它足夠大以容納結果并為潛在的斷言失敗或包裝行為做好準備。

筆記

在檢查模式下,求冪只對小基數(shù)使用相對便宜的exp操作碼。對于 的情況x**3,表達式x*x*x可能更便宜。在任何情況下,gas 成本測試和優(yōu)化器的使用都是可取的。

筆記

請注意,0**0EVM 將其定義為1.


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號