比如像0xdCad3a6d3569DF655070DEd06cb7A1b2Ccd1D3AF
這樣的通過了位址校驗和測試的十六進位字面常量會作為address
類型。 而沒有通過校驗測試, 長度在 39 到 41 個數位之間的十六進位字面常量,會產生一個錯誤,您可以在零前面添加(對於整數類型)或在零後面添加(對於bytesNN類型)以消除錯誤
整數位面常量由範圍在0-9的一串數位組成,表現成十進位。 例如, 69
表示數位 69。 Solidity 中是沒有八進位的,因此前置 0 是無效的。
十進位小數位面常量帶有一個 .
,至少在其一邊會有一個數位。 比如:1.
,.1
和1.3
。
科學符號也是支援的,儘管指數必須是整數,但底數可以是小數。 比如:2e10
, -2e10
, 2e-10
,2.5e1
為了提高可讀性可以在數字之間加上下劃線。 例如,十進位 123_000
,十六進制 0x2eff_abde
,科學十進位表示 1_2e345_678
都是有效的。 下劃線僅允許在兩位數之間,並且不允許下劃線連續出現。 添加到數字文字中下劃線沒有額外的語義,下劃線會被編譯器忽略。
數值字面常量表示式本身支援任意精度,除非它們被轉換成了非字面常量類型(也就是說,當它們出現在變數表達式中時就會發生轉換), 這意味著在數值常量表示式中, 計算不會溢出而除法也不會截斷。
例如,(2**800 + 1) - 2**800
的結果是字面常量 1
(屬於uint8
類型),儘管計算的中間結果已經超過了乙太坊虛擬機Ethereum Virtual Machine(EVM) 的機器字長度。 此外,.5 * 8
的結果是4
整型 (儘管有非整型參與了計算)。
uint128 a = 1;
uint128 b = 2.5 + a + 0.5;
字串字面常量是指由雙引號或單引號引起來的字串("foo"
或者 'bar'
)。 它們也可以分為多個連續的部分。 和整數位面常量一樣,字串字面常量的類型也可以發生改變,它們可以隱式地轉換成 bytes1
,......,bytes32
,如果合適的話,還可以轉換成 bytes
以及 string
例如: 字串字面常量在賦值給 時被解釋為原始的位元組形式。bytes32 samevar = "stringliteral"bytes32
字串字面常量只能包含可列印的ASCII字元,這意味著他是介於0x1F和0x7E之間的字元。
此外,字串字面常量支援下面的轉義字元:
常規字串文字只能包含ASCII,而Unicode文字(以關鍵字unicode為前綴)可以包含任何有效的UTF-8序列。 它們還支援與轉義序列完全相同的字元作為常規字串文字。
string **memory** a = unicode"Hello 😃";
十六進位字面常量以關鍵字 hex
打頭,後面緊跟著用單引號或雙引號引起來的字串(例如hex"001122FF"
)。 字串的內容必須是一個十六進位的字串,它們的值將使用二進位表示。
它們的內容必須是十六進位數位,可以選擇使用單個下劃線作為位元組邊界分隔符。 字面常量的值將是十六進位序列的二進位表示形式。
用空格分隔的多個十六進位字面常量被合併為一個字面常量:hex"00112233" hex"44556677"
等同於 hex"0011223344556677"
十六進位字面常量跟字串字面常量 很類似,具有相同的轉換規則