通學智慧型合約系列(四) 整型運算

2021-10-19 02:52:36 字數 2410 閱讀 8678

2.整型與算術運算

在solidity中,基本的整型有int(有符號整型,有正有負)uint(無符號整型,無負數)。並且他們以8位為區間,int支援int8,int16,int24int256,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版本,viewpure都已經編譯不會報錯,大家可以自己試試。

在這裡,還得揭曉乙個答案,那就是為什麼整型會分的那麼細呢?當然還是因為我們區塊鏈上的資源是極其寶貴的。所以要在合適的前提下,選擇最小的儲存型別。同時盡可能地多採用位運算。

復合運算

最後,看看我們的加加、減減

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...