美文网首页
【Solidity学习笔记】数据类型——整型(Integer)

【Solidity学习笔记】数据类型——整型(Integer)

作者: 海阳之新 | 来源:发表于2018-04-18 17:00 被阅读345次

    一、类型介绍

    1、有符号整型 int

    举个栗子:-1,+8

    int分为int8、int16、int24 ......,8位一步,直到int256
    如果后面的数字省略,则默认为int256
    int8后面的8是什么意思呢?
    即用8位二进制来存储(其中左边第1位用来表示 + - 符号),代表可存储的数字范围,如:
    11111111 ~ 01111111,左边第1位用来表示符号,1表示负,0表示正,
    换算成十进制则为 -(1+ 2 + 4 + 8 + 16 + 32+ 64) ~ (1+ 2 + 4 + 8 + 16 + 32+ 64)
    即可存储 -127 ~ 127 之间 255 个数字。
    也可以理解成存储范围为2的多少次方。

    2、无符号整型 uint

    举个栗子:0,200

    uint分为uint8、uint16、uint24 ......,8位一步,直到uint256
    如果后面的数字省略,则默认为uint256
    uint8代表可存储的数字范围,用8位二进制来存储(左边第1位不用来表示 + - 符号,即大于等于0的数),如:
    00000000 ~ 11111111
    即可存储 0 ~ 255 之间 255 个数字。
    也可以理解成存储范围为2的多少次方。

    二、测试Demo

    pragma solidity ^0.4.17;
    
    contract Test {
        uint8 _a;
    
        function Test(uint8 a) {
            _a = a;
        }
    
        function setA(uint8 a) {
            _a = a;
        }
    
        function a() constant returns (uint8) {
            return _a;
        }
    
        function add(uint8 a, uint8 b) public constant returns(uint8) {
            return a + b; //测试输入255,1试试,会报超出范围的错误
        }
    
        function div() constant returns (uint z) { //做除法
            uint x = 9;
            uint y = 2;
            z = x / y;
            return z;
        }
    }
    

    思考:
    为什么要定义这么多位数不同的类型?
    答:根据存储需要去定义最合适的存储范围,可节约内存,提高程序运行速度。

    三、整型字面量

    contract Test
     {
        function test1() constant returns (uint) {
            //uint8 a = 2 ** 800; //超过了uint8的范围,编译会报错
            uint8 a = 2 ** 800 - 2 ** 800 + 5; //这样是OK的,主要是看结果
            return a;
        }
        function test2() constant returns (uint) {
            uint8 a = 111111111111111111111111111111 - 111111111111111111111111111000; //这样也是OK的,只要结果不超过数据类型的范围
            return a;
        }
        function test3() constant returns (uint) {
            //小数运算
            //在Solidity中,没有float和double类型,做乘除法运算时,小数无条件舍弃。
            var c = 0.5*8;
            return c;
        }
      
    }
    

    总之,在计算过程中,字面量怎么计算都行,只要计算出来的结果不超过范围,就可以这样书写,否则就会出错。

    相关文章

      网友评论

          本文标题:【Solidity学习笔记】数据类型——整型(Integer)

          本文链接:https://www.haomeiwen.com/subject/qxoihftx.html