Solidity語言學習筆記————10、布林型、整型

FLy_鵬程萬里發表於2018-06-21

前言

本小節主要介紹一下Solidity程式設計中的布林資料型別和整型資料型別這兩種,其他的資料型別在之後的內容當中會陸續介紹。

布林型別(Booleans)

bool(布林)型別的值有兩種:
  • true
  • flase

支援的運算子有:

  • 邏輯與——&&
  • 邏輯或——||
  • 邏輯非——!
  • 等   於——=
  • 不等於——!=

bool資料型別的結果經常會被作為條件的判斷內容,從而控制條件分支的執行流程。
例如:

pragma solidity ^0.4.0;

contract test{

    function test1() returns(bool){
        return 1>0;
    }
    function test2() returns(bool){
        return 1<0;
    }
}

整型(Integer)

整型分為:有符號整型和無符號整型。
整型變數的步長以8遞增,支援從uint8到uint256,以及int8到int256。需要注意的是,uint和int預設代表的是uint256和int256

支援的運算子:

  • 比較運算子:<、<=、==、!=、>、>=,返回值為bool型別
  • 位 運 算 符:&、|、^(異或)、~(非)。
  • 算 術 運 算:+、-、*、/、**、%
  • 位   運   算:<<、>>、

整數除法總是截斷的,比如1/4=0。但如果運算子是字面量,則不會截斷,例如:var e=1/4。另外除0會丟擲異常,我們來看下面的例子:

pragma solidity ^0.4.0;

// simple store example

contract simpleStorage{

    function divide(uint x,uint y) returns (uint z){
        z = x / y;
    }
}


移位運算

移位可以分為左移位於右移位。
左移位x<<y相當於執行x*2**y
右移位x>>y相當於執行x/2**y

對一個負數移位會保留符號。

例如:

pragma solidity ^0.4.0;

contract IntegerTest{
    function shift() returns (int, int, int, int){
        var a = -1 << 2;//-4
        var b = -1 >> 2;//0
        var c = 1 << 2;//4
        var d = 1 >> 2;//0
        return (a, b, c, d);
    }
}


異常問題

除以0或對0取模,對一個值移負數位會丟擲執行時異常。

pragma solidity ^0.4.0;

contract IntegerTest{
    function exp() {
        uint a = 1;
        uint b = 0;
        
        //var x = a / b;//VM Exception: invalid opcode
        
        int c = -1;
        
        //var y = a >> c;//VM Exception: invalid opcode
    }
}


後續內容會陸續更新,敬請期待!


相關文章