W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
int/ uint:各種大小的有符號和無符號整數(shù)。關(guān)鍵字uint8to uint256(8無符號 8 到 256 位)和int8to int256。uint和分別是和int的別名。uint256int256
運營商:
對于整數(shù)類型X,您可以使用type(X).min和type(X).max訪問該類型可表示的最小值和最大值。
警告
Solidity 中的整數(shù)被限制在一定范圍內(nèi)。例如,使用uint32,這0取決于。對這些類型執(zhí)行算術(shù)運算有兩種模式:“包裝”或“未檢查”模式和“已檢查”模式。默認(rèn)情況下,算術(shù)始終是“檢查”的,這意味著如果操作的結(jié)果超出類型的值范圍,則調(diào)用將通過失敗的斷言恢復(fù)。您可以使用 切換到“未選中”模式。更多細(xì)節(jié)可以在關(guān)于 unchecked的部分中找到。2**32 - 1 unchecked { ... }
比較的值是通過比較整數(shù)值獲得的值。
對數(shù)字的二進(jìn)制補碼表示執(zhí)行位運算。這意味著,例如.~int256(0) == int256(-1)
移位操作的結(jié)果具有左操作數(shù)的類型,截斷結(jié)果以匹配類型。右操作數(shù)必須是無符號類型,嘗試按有符號類型移位會產(chǎn)生編譯錯誤。
可以通過以下方式使用乘以 2 的冪來“模擬”移位。請注意,對左操作數(shù)類型的截斷總是在最后執(zhí)行,但沒有明確提及。
x << y
等價于數(shù)學(xué)表達(dá)式。x * 2**y
x >> y
等價于數(shù)學(xué)表達(dá)式,向負(fù)無窮舍入。x / 2**y
警告
在該版本之前,負(fù)數(shù)0.5.0
右移相當(dāng)于向零舍入的數(shù)學(xué)表達(dá)式,即,使用向上舍入(向零)而不是向下舍入(向負(fù)無窮大)進(jìn)行右移。x >> y
x
x / 2**y
筆記
移位操作永遠(yuǎn)不會像算術(shù)運算那樣執(zhí)行溢出檢查。相反,結(jié)果總是被截斷。
加法、減法和乘法具有通常的語義,在上溢和下溢方面有兩種不同的模式:
默認(rèn)情況下,檢查所有算術(shù)是否不足或溢出,但可以使用unchecked block禁用此功能,從而導(dǎo)致算術(shù)包裝??梢栽谠摬糠种姓业礁嘣敿?xì)信息。
該表達(dá)式-x
等價于where is 的類型。它只能應(yīng)用于簽名類型。如果為負(fù),則的值可以為正。二進(jìn)制補碼表示還有另一個警告:(T(0) - x)
T
x
-x
x
如果有,則不適合正值范圍。這意味著有效,并且在檢查模式下使用表達(dá)式 將導(dǎo)致斷言失敗。int x = type(int).min;
-x
unchecked { assert(-x == x); }
-x
由于運算結(jié)果的類型始終是操作數(shù)之一的類型,因此整數(shù)除法始終產(chǎn)生整數(shù)。在 Solidity 中,除法向零舍入。這意味著.int256(-5) / int256(2) == int256(-2)
請注意,相比之下,文字除法會產(chǎn)生任意精度的小數(shù)值。
筆記
除以零會導(dǎo)致Panic 錯誤。無法通過 禁用此檢查。unchecked { ... }
筆記
該表達(dá)式是除法導(dǎo)致溢出的唯一情況。在檢查算術(shù)模式下,這將導(dǎo)致斷言失敗,而在包裝模式下,該值將為.type(int).min / (-1)
type(int).min
模運算產(chǎn)生操作數(shù) 除以操作數(shù)后的余數(shù),其中和。這意味著模運算的結(jié)果與其左操作數(shù)(或零)相同,并且對負(fù)數(shù)成立:a % n
r
a
n
q = 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)
筆記
帶零的模會導(dǎo)致恐慌錯誤。無法通過 禁用此檢查。unchecked { ... }
求冪僅適用于指數(shù)中的無符號類型。求冪的結(jié)果類型始終等于基數(shù)的類型。請注意它足夠大以容納結(jié)果并為潛在的斷言失敗或包裝行為做好準(zhǔn)備。
筆記
在檢查模式下,求冪只對小基數(shù)使用相對便宜的exp
操作碼。對于 的情況x**3
,表達(dá)式x*x*x
可能更便宜。在任何情況下,gas 成本測試和優(yōu)化器的使用都是可取的。
筆記
請注意,0**0
EVM 將其定義為1
.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: