整形?
????????int / uint:有符號和無符號整形數(shù)字骚揍,長度為256個字節(jié),int代表int256,uint代表uint256;
????????也可聲明8的倍數(shù)的整形线梗,如int8嚼鹉,uint8到uint256指蚁;
????????為什么會使用低位的整形呢厕九?因為智能合約對每一個字節(jié)的存儲都是需要gas的,所以選擇一個合適的長度會有效減省gas費用除师。
????????操作: 比較 <=, <, ==, !=, >=, > 返回(bool)
????????????????????位運算 &沛膳,|,^(按位異或)汛聚,~(按位取反)
????????????????????算術運算 +于置,-,*贞岭,/八毯,%,**(乘方)瞄桨,<<(左移)话速,>>(右移)
????????????????????左移運算符 x << y 和 x * 2**y 是相等的,x >> y 和 x / 2**y 是相等的芯侥。
地址類型
????????Address :20個字節(jié)長度泊交,地址是所有智能合約的基礎。
????????????操作:<=柱查,<廓俭,==,!=唉工,>=研乒,>
????????????屬性:Balance
????????????方法:send,call淋硝,callcode雹熬,delegatecall
數(shù)組
????????變長字節(jié)數(shù)組宽菜,數(shù)組長度由自己去定義;
????????????例: uint[10] a = {1,2,3};
? ? ? ? ? ? 二維數(shù)組 uint[2][3] uu;
????????固定字節(jié)數(shù)組 bytes1,bytes2,bytes3...bytes32竿报,其中byte是bytes1的別名铅乡。
????????????操作:索引訪問:如果x是bytesI類型的,那么x[k]返回第k個字節(jié)烈菌,0<=k<I阵幸。
????????????例:bytes1 public b1 = 255;
???????????????????bytes2 public b2 = "ab";
字符串
????????string 在solitidy中只是基本的存儲字符串數(shù)據(jù),定義好后不可改變芽世,除了讀之外不能對他進行別的任何操作侨嘀,比如截取、合并等等捂襟;可聲明數(shù)組。
????????例:string public str = "這是字符串";
枚舉
????????enum ActionChoices { GoLeft, GoRight, GoStraight, SitStill }
函數(shù)類型
????????函數(shù)類型是一種表示函數(shù)的類型欢峰≡岷桑可以將一個函數(shù)賦值給另一個函數(shù)類型的變量,也可以將一個函數(shù)作為參數(shù)進行傳遞纽帖,還能在函數(shù)調(diào)用中返回函數(shù)類型變量宠漩。
結構體
? ? ? ? struct Student{
? ? ? ? ? ? address add;
? ? ? ? ? ? uint age;
????????}
映射
????????是一種關聯(lián),類似于Map集合的鍵值對懊直。
? ? ? ? mapping (uint => Student) public student;
例:
pragma solidity ^0.4.18;
contract MappingDemo{
? ? //結構體
????struct Account{
????????address add;
????????uint balance;
????}
? ? //映射變量
????uint public mapNum;
? ? //映射
????mapping(uint => Account) public accounts;
????//事件
????event e(string _str,address _add,uint balance);
? ? //新建賬戶
????function newAccount(address _add,uint balance) public returns(uint){
????????++mapNum;
????????accounts[mapNum] = Account(_add,balance);
????????emit e("newAccount",_add,balance);
????}
? ? //修改余額?
????function setAccount(uint _u,uint _balance) public{
????????Account storage a = accounts[_u];
????????a.balance = _balance;
????????emit e("setAccount",a.add,a.balance);
????}
}