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