Solidity語言學習筆記————11、隱式轉換和顯式轉換
隱式轉換(Implicit Conversions)
如果將一個運算子應用於多個不同型別,編譯器會試圖隱式地把其中一個運算元的型別轉換為另一個運算元的型別。賦值操作在同樣的情況下也會這樣。
一般來說,如果轉換後不會造成資訊會丟失,會自動進行隱式轉換:
unt8
可轉換成uint16
,int128
,int256
int8
不能轉換成uint256
,因為uint256
放不下負數- 無符號整數可以轉換成相同或更大的尺寸的bytes , 但反過來不行
- 任何可以轉化為
uint160
的型別,也可以轉換為address
顯式轉換(Explicit Conversions)
如果編譯器不允許某種隱式轉換,但你可以手動顯式轉換:
int8 y = -3;
uint x = uint(y);
這個程式碼片段結尾 ,x
的值是0xfffff . .fd
(64個十六進位制字元)——-3在256位的二進位制補碼錶示。
如果一個型別被顯式轉換為一個更小的型別,高階位將被移除。
uint32 a = 0x12345678;
uint16 b = uint16(a); // b會變成0x5678
型別推導(Type Deduction)
為方便起見,並不總是需要顯式地指定一個變數的型別。編譯器會自動從第一個賦值表示式的變數型別裡推斷出新變數的型別:
uint24 x = 0x123;
var y = x;
這裡y
的型別是uint24
。對於函式引數或返回值不能使用var
。警告 |
---|
這個型別僅僅是從第一次賦值推導得出的,所以以下程式碼是死迴圈 |
for (var i = 0;< 2000;i+ +){
......
}
因為 i
的型別是uint8
, 這種型別的任何值都小於2000
。相關文章
- js顯式轉換和隱式轉換JS
- Java資料型別的顯式轉換和隱式轉換Java資料型別
- 筆記:隱式轉換規則筆記
- C語言的隱式型別轉換C語言型別
- Solidity語言學習筆記————18、字串和函式Solid筆記字串函式
- Scala - 隱式轉換和隱式引數
- Solidity語言學習筆記————28、純函式Solid筆記函式
- Solidity語言學習筆記————26、回退函式Solid筆記函式
- Cris 的 Scala 筆記整理(十):隱式轉換筆記
- javascript 隱式轉換JavaScript
- sql隱式轉換SQL
- Oracle 隱式轉換Oracle
- java隱式轉換Java
- Solidity語言學習筆記————23、函式呼叫和賦值Solid筆記函式賦值
- javascript資料型別隱式和顯式轉換詳解JavaScript資料型別
- Solidity語言學習筆記————27、檢視函式Solid筆記函式
- Solidity語言學習筆記————30、函式過載Solid筆記函式
- 雜記四:scala 柯理化和隱式轉換
- 【隱式轉換】注意隱式轉換將導致索引無法使用索引
- Scala Essentials: 隱式轉換
- Solidity語言學習筆記————20、函式修飾符Solid筆記函式
- Scala隱式轉換與隱式引數
- MySQL和Oracle中的隱式轉換MySqlOracle
- JavaScript隱式型別轉換JavaScript型別
- mysql隱式轉換問題MySql
- MySQL 隱式型別轉換MySql型別
- 【C++】禁止隱式轉換C++
- Solidity語言學習筆記————1、初識Solidity語言Solid筆記
- Solidity語言學習筆記————42、提示和技巧Solid筆記
- scala中隱式轉換之隱式轉換呼叫類中本不存在的方法
- C# 隱式型別轉換(轉載)C#型別
- [] == ![],走進==隱式轉換的世界
- MySQL索引失效之隱式轉換MySql索引
- JS隱式轉換--寬鬆相等(==)JS
- c語言學習筆記===函式C語言筆記函式
- Solidity語言學習筆記————4、常量Solid筆記
- Solidity語言學習筆記————36、 庫Solid筆記
- Solidity語言學習筆記————38、Solidity彙編Solid筆記