通学智能合约系列(四)--整型运算

2.整型与算术运算

在solidity中,基本的整型有int(有符号整型,有正有负)uint(无符号整型,无负数)。并且他们以8位为区间,int支持int8,int16,int24int256,uint同理。int默认为int256,uint默认为uint256.

思考一下,为什么solidity要搞这么多整型类型,还分的这么细致呢?

而他们支持的算术操作有以下等:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yQbc1Hgk-1612448413885)(C:\Users\49178\AppData\Roaming\Typora\typora-user-images\image-20210204204902966.png)]

下面我们通过代码来看看他们的基本运算:

基本算术运算
pragma solidity ^0.4.16;

contract Math{
    //加
    function add(uint a,uint b) public returns(uint){
        return a+b;
    }
	//减
    function minus(uint a,uint b) public returns(uint){
        return a-b;
    }
    //乘
    function multiply(uint a,uint b) public returns(uint){
        return a*b;
    }
    //除
    function divide(uint a,uint b) public returns(uint){
        return a/b;
    }
    //取余
    function mod(uint a,uint b) public returns(uint){
        return a%b;
    }
    //幂运算
    function square(uint a,uint b) public returns(uint){
        return a**b;
    }
}

大家可以发现,除了幂运算和我们平常语言有些差别之外,其他的运算已经成为国际通用写法。

位运算

接下来,我们来重点看看位运算,solidity支持的位运算有以下几种

位与&位或|位非~位异或^左移>>,右移<<,我们来看一个例子:

通过位运算可以得出以下结果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ukPzxI1-1612448413887)(C:\Users\49178\AppData\Roaming\Typora\typora-user-images\image-20210204213534582.png)]

我们在编写合约看看:

pragma solidity ^0.4.16;

contract Math{
    
    uint8 a = 3;
    uint8 b = 4;
    function bitwiseAnd() public returns(uint8){
        return a&b;
    }

    function bitwiseOr() public returns(uint8){
        return a|b;
    }
    
    function tilde() public returns(uint8){
        return ~a;
    }
    
    function caret() public returns(uint8){
        return a^b;
    }
    
    function leftShift() public returns(uint8){
        return a<<1;
    }
    
    function rightShift() public returns(uint8){
        return a>>1;
    }
}

查看结果,我们会发现和我们excel中的结果是一样一样的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2aMhPCBO-1612448413889)(C:\Users\49178\AppData\Roaming\Typora\typora-user-images\image-20210204215330302.png)]

其次,我们看会发现,我们之前每一次部署的合约,都可以继续访问和调用。哈哈,这就是我们区块链的一个重要特性,且是最重要的特性不可篡改。一旦部署,则永久存在。(当然如果真真真的要改,也是有办法的。)

此外,在这个0.4.16版本,viewpure都已经编译不会报错,大家可以自己试试。

在这里,还得揭晓一个答案,那就是为什么整型会分的那么细呢?当然还是因为我们区块链上的资源是极其宝贵的。所以要在合适的前提下,选择最小的存储类型。同时尽可能地多采用位运算。

复合运算

最后,看看我们的加加、减减

pragma solidity ^0.4.16;

contract Math{
    //输出a
    function add2(uint a) public returns(uint){
        return a++;
    }
    //输出a+1
    function add3(uint a) public returns(uint){
        return ++a;
    }
    //输出a
    function minus2(uint a) public returns(uint){
        return a--;
    }
    //输出a-1
    function minus3(uint a) public returns(uint){
        return --a;
    }
}

这个复合运算,在其他编程语言中也是一样的结果。可能很多初学编程的朋友容易搞错,在这里我就再啰嗦一句。

只要记住这句口诀,就不会出错啦。

那就是谁在前,结果输出谁(加号在前,结果加一;数字在前,结果输出数字本身);而变量本身等于运算后的值

我们上面的两小节,内容都相对简单。下一节,我们则分析solidity中运算值得注意的一点,敬请期待哈。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值