iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 16
0

**Day 16:

4.類型轉換和推測
(1).類型隱式轉換
運算子應用於不同變數類型時,
編譯器將會嘗試把其中一個變數轉換為其他類型
(賦值也是如此)。變數之間的隱式轉換是可實行的,
例如:uint16可以轉換為uint32,
int64可以轉換為int128,但是int128不能隱式轉換
為uint128(因為uint不能設為負數)。
Example:
pragma solidity ^0.4.24;

		contract convert{
			function test() public returns(int16 c){
				int8 a = 1;
				int16 b = 2;
				c = a+b;  /* a會轉換為int16 */
				return c;
			}
		} 
	(2).類型顯式轉換
		如果編譯器不允許隱式轉換,則必須要使用顯式轉換,
        但是顯式轉換的操作可能會造成一些錯誤,在操作顯示轉換前,
        務必先測試,確保結果正確。
		Example:
		-將負數轉換為uint
		int8 y = -5;
		uint x = uint(y);
		-如果記憶體較大的變數被轉換為記憶體較小的變數,
		  則高位元的部分會被捨去
		uint32 a = 0x12345678;
		uint16 b = uint(a);
		則 b = 0x5678;
	(3).推測變數類型
		當使用var宣告變數時,var會自動推測變數類型,
        但是不可以作為函數的參數。
		var a = 32;
		注意:var偶爾會做出錯誤推斷。
		另一整使用方式,可將函數設為var變數。
		Example:
		function a(uint x) returns (uint){
			return x * 2;
		}
		var b = a;
		b(22);   /* 呼叫函數 */
5.時間和貨幣的單位
	(1).時間
	如果需要進行日期計算,需要注意,
    對於時間的處理應盡量使用小於或大於。
	時間單位: seconds , minutes , hours , days , weeks , years ,
	Default為seconds,時間單位均可作為後綴。
	-時間後綴不能直接應用於變數,必須以範例的方式使用
	Example:
	uint a = 1;
	uint b = a * 1 days; /* b為86400 , 1天 == 86400秒 */
	uint c = a * 1 seconds; /* c為1 */

	(2).貨幣
	貨幣單位使用的後綴為,wei,finney,szabo,ether,
	Default為wei。
	規則 : 
	● ether = 1000 finney;
	● ether = 1000000 szabo;
	● ether = 10^18 wei;

**


上一篇
Day 15 Solidity 語法類型(一)
下一篇
Day 17 Solidity 語法類型(三)
系列文
以太坊-探索智能合約的多種面向20

尚未有邦友留言

立即登入留言