前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零构建以太坊(Ethereum)智能合约到项目实战——学习笔记6

从零构建以太坊(Ethereum)智能合约到项目实战——学习笔记6

作者头像
墨文
发布2020-02-28 14:44:58
8470
发布2020-02-28 14:44:58
举报
文章被收录于专栏:m0w3nm0w3n

P21 、1-Solidity Types - 整型(Integer) (一)

 int/uint:变长的有符号或无符号整型。变量支持的步长以8递增,支持从uint8到uint256,以及int8到int256。需要注意的是,uint和int默认代表的是uint256和int256.

对于有符号整型中,1表示负数,0表示正数。

代码语言:javascript
复制
pragma solidity ^0.4.4;
//uint8 uint16 uint24 ..... uint256
//int8 int16 int24 .....int256

//int => int256 等价
//uint => uint256 等价

//int8 有符号 , +1, -1
//uint8 无符号 ,3,8,10

//int8 ->8位
//范围:1111 1111 ~ 0111 1111
//-(1+2+4+8+16+32+64) ~ +(1+2+4+8+16+32+64)
// -127 ~ +127 255

//uint8 ->8位
//范围:0000 0000 ~ 1111 1111
//0 ~ (1+2+4+8+16+32+64+128)
//0 ~ 255 255

contract Test{
  uint8 _a;

  function Test(uint8 a){
    _a=a;
  }
  function setA(uint8 a){
    _a=a;
  }

  function a() constant returns (uint8){
    return _a;
  }
}

对于uint 类型的变量_a,输入300,结果输出44(被截取了)

300:100101100 

44:        101100

可以看出300前面的3位2进制(100)被截掉了,留下(101100),所以是44

P22 、2-Solidity Types - 整型(Integer) - Var遇到的坑(二)

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract Test{

  function testVar constant returns(uint8){
    uint8 a=100;
    var b=a;
    return b;
  }

  function testVar1 constant returns(uint){
    uint a;
    //uint8  i  0~255  
    for(var i=0;i<255;i++)
    {
        a=i;
    }
    return a;
  }

P23 、3-Solidity Types - 整型(Integer) - 比较运算符(三)

支持的运算符:

  • 比较:<=、<、==、!=、>=、>,返回值为bool类型。
  • 位运算符:&、|、(^异或)、(~非)。
  • 数学运算:+、-、一元运算+、*、/、(%求余)、(**次方)、(<<左移)、(>>右移)。

Solidity目前没有支持double/float,如果是7/2会得到3,即无条件舍去。但如果运算符是字面量,则不会截断(后面会进一步提到)。另外除0会抛异常,我们来看看下面的这个例子:

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract Test{
    uint a;
    uint b;
    
    function Test(){
        a=100;
        b=200;
    }
    
    //<= < == != >= >
    
    function test1() constant returns(bool){
        return a<=b;
    }
    
    function test2() constant returns(bool){
        return a<b;
    }
    
    function test3() constant returns(bool){
        return a==b;
    }
    
    function test4() constant returns(bool){
        return a!=b;
    }
    
    function test5() constant returns(bool){
        return a>=b;
    }
    
    function test6() constant returns(bool){
        return a>b;
    }
}

P24 、4-Solidity Types - 整型(Integer) - 与或非异或(四)

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract Test{
    uint8 a;
    uint8 b;
    
    function Test(){
        a=5; // 0000 0101
        b=8; // 0000 1000
    }
    
    //& | ^ ~
    
    function test1() constant returns(uint8){
        return a & b;//0
        // 0000 0101
        // 0000 1000
        // 0000 0000
    }
    
    function test2() constant returns(uint8){
        return a | b; //13
        // 0000 0101
        // 0000 1000
        // 0000 1101
        //1+4+8
    }
    
    function test3() constant returns(uint8){
        return a ^ b;  //13
        // 0000 0101
        // 0000 1000
        // 0000 1101
        //1+4+8
    }
    
    function test4() constant returns(uint8){
        return ~a;
        // 0000 0101
        // 1111 1010
        // 0+2+0+8+16+32+64+128 = 250
        
    }
}

P25 、5-Solidity Types - 整型(Integer) - 加减乘除求余(五)

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract Test{
    int8 a;
    int8 b;
    
    function Test(){
        a=5; // 0000 0101
        b=8; // 0000 1000
    }
    
    // + - * /
    
    function test1() constant returns(int8){
        return a + b;
    }
    
    function test2() constant returns(int8){
        return a - b; 
    }
    
    function test3() constant returns(int8){
        return a * b;
    }
    
    function test4() constant returns(int8){
        return a/b;
    }
}

P26 、6-Solidity Types - 整型(Integer) - 求幂,左移,右移(六)

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract Test{
    uint8 a;
    
    function Test(){
        a=8;
    }
    
    function test1(uint8 b) constant returns(uint8){
        return a ** b; //a的b次方
    }
    
    function test2(uint8 b) constant returns(uint8){
        return a << b; 
        // 0000 1000
        // b = 2 
        // 0010 0000
        // 32
    }
    
    function test3(uint8 b) constant returns(uint8){
        return a >> b;
        // 0000 1000
        // b = 2 
        // 0000 0010
        // 2
    }

}

P27 、7-Solidity Types - 整型(Integer) - 字面量(七)

代码语言:javascript
复制
pragma solidity ^0.4.4;

contract Test{
    
    function test1(uint8 b) constant returns(uint8){
        uint8 a=2**800 - 2**800  + 5;
        return a;
    }
    
    function test2(uint8 b) constant returns(uint){
        uint8 a = 111111111111111111111111111111111 - 111111111111111111111111111111000;
        return a;
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档