3.8 solidity資料型別詳解
1. 值型別:以下型別在傳值時採用值傳遞
a. 布林(Booleans):
i. bool可能取值為常量true和false、在不初始化的情況下,預設為false。
ii. 支援運算子有 邏輯非(!)、邏輯與(&&)、邏輯(||)、等於(==)、不等於(!=)
iii. 運算子&&和||是短路運算子,如f(x)||g(y),當f(x)為真時,則不會繼續執行g(y)
iv. bool與條件語句
b. 整型(Integer):
i. 變長的有符號或無符號整型。變數支援的步長以8遞增,支援從uint8到uint256,以及int8到int256。需要注意的是,uint和int預設代表的是uint256和int256。
ii. 支援的運算子
1. 比較:<=,<,==,!=,>=,>,返回值為bool型別
2. 位運算:&,|,(^異或),(~非)
3. 數學運算:+,-,*,/,(%求餘),(**乘方)
iii. 注意 solidity不支援8進位制
iv. 整形的上溢和下溢
1. 如果一個整形變數的值達到了它的最大值,再加一個大於0的數會變成0
2. 如果一個整形變數的值達到了它的最小值,再減一個大於0的數會變成它的最大值
3. 比如 uint8 a = 255 那麼a + 1 = 0; uint8 b = 0, b - 1 = 255;
c. 小數
i. 字面量:如果字面量計算的結果不是一個整數,那麼將會轉換為一個對應的ufixed,或fixed型別。Solidity會選擇合適的大小,以能儘量包含小數部分
ii. 運算子:適用於整型的操作符,同時適用於數字的字面量運算表示式,當操作結果是整數時。如果有任何一方是有理數,將不允許使用位操作符。如果指數是小數,還將不能進行取冪運算
iii. 二進位制表示:大多數含小數的十進位制,均不可被二進位制準確表達,比如5.3743的型別可能是ufixed8*248。如果你想使用這樣的值,需要明確指定精度x + ufixed(5.3743),否則會報型別轉換錯誤
iv. 截斷:在當前版本中沒有截斷,5/2=2.5
v. 字面量轉換:數字的字面量表示式,一旦其中含有非字面量表示式,它就會被轉為一個非字面量型別
2. 引用型別:以下型別在傳值時採用引用傳遞
a. 不定長位元組陣列(bytes)
b. 字串(string)
c. 陣列(Array)
d. 結構體(Structs)
3. 基本型別之間的型別轉換
a. 隱式
i. 如果運算子支援兩邊不同的型別,編譯器會嘗試隱式轉換型別,同理,賦值時也是類似。通常,隱式轉換需要能保證不會丟失資料,且語義可通。如uint8可以轉化為uint16,uint256。但int8不能轉為uint256,因為uint256不能表示-1。
ii. 此外,任何無符號整數,可以轉換為相同或更大大小的位元組值。比如,任何可以轉換為uint160的,也可以轉換為address。
b. 顯示
i. 如果不允許隱式型別轉換,確保可以轉換時可以採用強轉
ii. 注意如果由一個大的型別(uint32)轉換為小的型別(uint16),高位會被截斷
c. 型別推斷
i. 使用var可以在第一次賦值的時候推斷變數的型別,但不能用於函式的引數
ii. Var 可以用來把函式賦值給一個變數
iii. 注意 有時個 var會推斷出錯誤的型別
-
學院Go語言視訊主頁
https://edu.csdn.net/lecturer/1928 -
掃碼獲取海量視訊及原始碼 QQ群:721929980
相關文章
- 詳解MySQL資料型別MySql資料型別
- MySQL 資料型別詳解MySQL 資料型別
- JavaScript——資料型別詳解JavaScript資料型別
- JS -- number資料型別詳解JS資料型別
- Java整型資料型別(詳解)Java資料型別
- Python資料型別詳解03Python資料型別
- Python資料型別詳解02Python資料型別
- JavaScript 資料型別與型別判斷詳解JavaScript資料型別
- 3.10 solidity資料結構詳解Solid資料結構
- Solidity-變數和資料型別[複合型別_1]Solid變數資料型別
- fwMySql資料型別教程示例詳解MySql資料型別
- JavaScript變數與資料型別詳解JavaScript變數資料型別
- Kotlin——初級篇(三):資料型別詳解Kotlin資料型別
- C#資料型別及其轉換詳解C#資料型別
- MySQL 中 blob 和 text 資料型別詳解MySql資料型別
- dnMySQL 資料型別詳情MySQL 資料型別
- XML Schema 字串資料型別及約束詳解XML字串資料型別
- LWMySQL 資料型別詳情kqhMySQL 資料型別
- [JAVA] Java 變數、表示式和資料型別詳解Java變數資料型別
- 非關係型資料庫(NOSQL)和關係型資料庫(SQL)區別詳解資料庫SQL
- Kotlin 資料型別詳解:數字、字元、布林值與型別轉換指南Kotlin資料型別字元
- 3.14 solidity庫詳解Solid
- Mysql系列第二講 詳解mysql資料型別(重點)MySql資料型別
- Redis常見的5種不同的資料型別詳解Redis資料型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- C#型別詳解C#型別
- 資料型別: 資料型別有哪些?資料型別
- 3.9 solidity變數詳解Solid變數
- 3.11 solidity 函式詳解Solid函式
- JavaScript 資料型別轉換詳細解釋已經parseInt等JavaScript資料型別
- redis部署以及各種資料型別使用命令等詳解Redis資料型別
- Redis三種特殊資料型別API詳解附帶詳細使用場景Redis資料型別API
- NumPy 超詳細教程(2):資料型別資料型別
- 區別值型別資料和引用型別資料型別
- Java 型別資訊詳解和反射機制Java型別反射
- DNS常見資源記錄型別詳解DNS型別
- SAP 移動型別詳解型別
- C++引用型別詳解C++型別