从零构建以太坊(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;
    }
}

 

posted @ 2019-01-28 17:47  m0w3n  阅读(323)  评论(0编辑  收藏  举报