《Solidity 教程》字面常量

位址字面常量

比如像0xdCad3a6d3569DF655070DEd06cb7A1b2Ccd1D3AF這樣的通過了位址校驗和測試的十六進位字面常量會作為address類型。 而沒有通過校驗測試, 長度在 39 到 41 個數位之間的十六進位字面常量,會產生一個錯誤,您可以在零前面添加(對於整數類型)或在零後面添加(對於bytesNN類型)以消除錯誤

有理數和整數位面常量

整數位面常量由範圍在0-9的一串數位組成,表現成十進位。 例如, 69 表示數位 69。 Solidity 中是沒有八進位的,因此前置 0 是無效的。

十進位小數位面常量帶有一個 .,至少在其一邊會有一個數位。 比如:1..11.3

科學符號也是支援的,儘管指數必須是整數,但底數可以是小數。 比如:2e10-2e102e-102.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之間的字元。

此外,字串字面常量支援下面的轉義字元:

  •  (轉譯實際換行)
  • \ (反斜杠)
  • ' (單引號)
  • " (雙引號)
  • \b (退格)
  • \f (換頁)
  • \n (換行符)
  • \r (回車)
  • \t (標籤 tab)
  • \v (垂直標籤)

Unicode 字面常量

常規字串文字只能包含ASCII,而Unicode文字(以關鍵字unicode為前綴)可以包含任何有效的UTF-8序列。 它們還支援與轉義序列完全相同的字元作為常規字串文字。

string **memory** a = unicode"Hello 😃";

十六進位字面常量

十六進位字面常量以關鍵字 hex打頭,後面緊跟著用單引號或雙引號引起來的字串(例如hex"001122FF" )。 字串的內容必須是一個十六進位的字串,它們的值將使用二進位表示。

它們的內容必須是十六進位數位,可以選擇使用單個下劃線作為位元組邊界分隔符。 字面常量的值將是十六進位序列的二進位表示形式。

用空格分隔的多個十六進位字面常量被合併為一個字面常量:hex"00112233"  hex"44556677" 等同於 hex"0011223344556677"

十六進位字面常量跟字串字面常量 很類似,具有相同的轉換規則

Subscribe to Samumu.eth
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.