zoukankan      html  css  js  c++  java
  • 从零构建以太坊(Ethereum)智能合约到项目实战——学习笔记6

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

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

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

    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遇到的坑(二)

    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;
      }
      function testVar2 constant returns(uint){
        uint a;
        //uint8  i  0~255  
        for(uint16 i=0;i<=255;i++)
        {
            a=i;
        }
        return a;
      }
    } 


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

    支持的运算符:

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

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

    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) - 与或非异或(四)

    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) - 加减乘除求余(五)

    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) - 求幂,左移,右移(六)

    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) - 字面量(七)

    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;
        }
    }

  • 相关阅读:
    用户代理列表--爬虫伪装浏览器访问用
    python爬虫解析页面数据的三种方式
    requests模块的使用
    Python pip源更改
    个人博客项目开发
    Django之中间件
    Django之发送邮件
    Django组件之用户认证组件
    Django之Cookie与session
    Django组件之分页器
  • 原文地址:https://www.cnblogs.com/little-kwy/p/10331184.html
Copyright © 2011-2022 走看看