Solidity语言学习笔记————10、布尔型、整型

  • Post author:
  • Post category:solidity


前言

本小节主要介绍一下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
    }
}





后续内容会陆续更新,敬请期待!



版权声明:本文为Fly_hps原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。