2.整型與算術運算
在solidity中,基本的整型有int(有符號整型,有正有負)
和uint(無符號整型,無負數)
。並且他們以8位為區間,int
支援int8
,int16
,int24
至int256
,uint
同理。int預設為int256,uint預設為uint256.
思考一下,為什麼solidity要搞這麼多整型型別,還分的這麼細緻呢?
而他們支援的算術操作有以下等:
下面我們通過**來看看他們的基本運算:
基本算術運算
pragma solidity ^0.4.16;
contract math
//減function minus(uint a,uint b) public returns(uint)
//乘function multiply(uint a,uint b) public returns(uint)
//除function divide(uint a,uint b) public returns(uint)
//取餘
function mod(uint a,uint b) public returns(uint)
//冪運算
function square(uint a,uint b) public returns(uint)
}
大家可以發現,除了冪運算
和我們平常語言有些差別之外,其他的運算已經成為國際通用寫法。
位運算接下來,我們來重點看看位運算
,solidity支援的位運算有以下幾種
位與&
,位或|
,位非~
,位異或^
,左移》
,右移<<
,我們來看乙個例子:
通過位運算可以得出以下結果。
我們在編寫合約看看:
pragma solidity ^
0.4.16
;contract math
function bitwiseor
() public returns
(uint8
)
function tilde
() public returns
(uint8
)
function caret
() public returns
(uint8
)
function leftshift
() public returns
(uint8
)
function rightshift
() public returns
(uint8
)}
檢視結果,我們會發現和我們excel中的結果是一樣一樣的。
其次,我們看會發現,我們之前每一次部署的合約,都可以繼續訪問和呼叫。哈哈,這就是我們區塊鏈的乙個重要特性,且是最重要的特性不可篡改
。一旦部署,則永久存在。(當然如果真真真的要改,也是有辦法的。)
此外,在這個0.4.16
版本,view
和pure
都已經編譯不會報錯,大家可以自己試試。
在這裡,還得揭曉乙個答案,那就是為什麼整型會分的那麼細呢?當然還是因為我們區塊鏈上的資源是極其寶貴的。所以要在合適的前提下,選擇最小的儲存型別。同時盡可能地多採用位運算。
復合運算
最後,看看我們的加加、減減
pragma solidity ^
0.4.16
;contract math
//輸出a+1
function add3
(uint a) public returns
(uint
)//輸出a
function minus2
(uint a) public returns
(uint
)//輸出a-1
function minus3
(uint a) public returns
(uint
)}
這個復合運算,在其他程式語言中也是一樣的結果。可能很多初學程式設計的朋友容易搞錯,在這裡我就再囉嗦一句。
只要記住這句口訣,就不會出錯啦。
那就是誰在前,結果輸出誰(加號在前,結果加一;數字在前,結果輸出數字本身);而變數本身等於運算後的值
。
我們上面的兩小節,內容都相對簡單。下一節,我們則分析solidity中運算值得注意的一點,敬請期待哈。
通學智慧型合約(九) 陣列
固定陣列 首先我們來看看固定陣列的預設值。pragma solidity 0.4.16 contract fixarray 編譯執行後,我們可以看到,固定陣列初始值都為0.函式對固定陣列初始值進行修改 pragma solidity 0.4.16 contract fixarray function...
通學智慧型合約系列(六) 位元組陣列
關鍵字有 bytes1,bytes2mbytes3,bytes32 以步長1遞增 byte代表bytes1。pragma solidity 0.4.16 contract bytearray 固定長度位元組陣列對於數值來說,有點等同於我們的uint。乙個位元組等於8位。即bytes1 有點等同於ui...
通學智慧型合約系列(七) 字串
字串 我們都知道字串在其他程式語言中,都是出場率相當高的乙個角色,重要程度不言而喻。在solidity中也不例外。在上節我們學習了動態位元組陣列,而我們的字串,可不可以按照動態位元組的陣列去獲取他的長度和其中的元素呢?我們寫乙個例子來看看吧。pragma solidity 0.4.16 contra...