区块链——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;

    }

运行效果:

代码段6:

function errorTest() returns(int){

        int a = 2;

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

        return a/b;

    }

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

代码段7:

function errorTest3() returns(int){

        int a = 2;

        return a<<-1;

    }

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

代码段8:

function errorTest4() returns(int){

        int a = 2;

        int b = -1;

        return a<<b;

    }

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值