区块链——Solidity智能合约基础实战(五)

                                              区块链——Solidity智能合约基础实战(五)

                                                       危险的整数溢出以及异常处理

代码段1:

function flow() view public returns(uint){

        uint8 mm = 255;

        return mm;

    }

编译运行后可知应该返回的结果为255,实际结果也为255

代码段2:

function flow() view public returns(uint){

        uint8 mm = 0;

        return mm;

    }

编译运行后可知应该返回的结果为0,实际结果也为0

代码段3:

function flow() view public returns(uint){

        uint8 mm = 255;

        mm++;

        return mm;

    }

编译运行后可知应该返回的结果为256,实际结果为0,说明溢出

代码段4:

function flow() view public returns(uint){

        uint8 mm = 0;

        mm--;

        return mm;

    }

编译运行后可知应该返回的结果为0(因为uint不能为负数,所以还是0),实际结果为255

由上面4组代码可以知道,在编写代码的过程中,出现上溢或者下溢都会造成不好的影响,所以要进行异常处理。

补充知识:

由于没有pure,红色方框代表编译器认为你可能要调用函数外的变量,并且部署在区块链后不会直接显示出来。

有了pure,蓝色方框就代表这个函数只引用了函数内部的变量。

总结:红色消耗gas,蓝色不消耗gas

代码段5:

function errorTest() returns(int){

        int a = 2;

        int b = 3;

        return a/b;

    }

运行效果:

区块链——Solidity智能合约基础实战(五)_第1张图片

代码段6:

function errorTest() returns(int){

        int a = 2;

        int b = 0;//不能执行除0操作

        return a/b;

    }

此处会报错,因为分母不能为0

区块链——Solidity智能合约基础实战(五)_第2张图片

代码段7:

function errorTest3() returns(int){

        int a = 2;

        return a<<-1;

    }

无法通过编译,不能左移负数位

代码段8:

function errorTest4() returns(int){

        int a = 2;

        int b = -1;

        return a<

    }

可以通过编译,但是调用函数时依旧报错,不能左移负数位

区块链——Solidity智能合约基础实战(五)_第3张图片

你可能感兴趣的:(以太坊,区块链)