您好,登录后才能下订单哦!
本篇内容介绍了“Solidity数据类型有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
int/uint:变长的有符号或无符号整型。变量支持的步长以8递增,支持从uint8到uint256,以及int8到int256。需要注意的是,uint和int默认代表的是uint256和int256。
有符号整型能够表示负数的代价是其能够存储正数的范围的缩小,因为其约一半的数值范围要用来表示负数。如:uint8的存储范围为0 ~ 255,而int8的范围为-127 ~ 127
支持的运算符:
 
 比较:<=,<,==,!=,>=,>,返回值为bool类型。
 
 位运算符:&,|,(^异或),(~非)。
 
 数学运算:+,-,一元运算+,*,/,(%求余),(**次方),(<<左移),(>>右移)。
  
小数由"."组成,在他的左边或右边至少要包含一个数字。如"1.",".1","1.3"均是有效的小数。
pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract Math {
  function mul(int a, int b) public pure returns (int) {
      int c = a * b;
      return c;
  }
  function div(int a, int b) public pure  returns (int) {
      int c = a / b;
      return c;
  }
  function sub(int a, int b) public pure  returns (int) {
      
      return a - b;
  }
  function add(int a, int b) public pure  returns (int) {
      int c = a + b;
      return c;
  }
}pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract Math {
  function m(int a, int b) public pure returns (int) {
      int c = a % b;
      return c;
  }
}pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract Math {
  function m(uint a, uint b) public pure returns (uint) {
      uint c = a**b;
      return c;
  }
}pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract Math {
  function yu() public pure returns (uint) {
      uint a = 3; // 0b0011
      uint b = 4; // 0b0100
    
      uint c = a & b; // 0b0000
      return c; // 0
  }
  function huo() public pure returns (uint) {
      uint a = 3; // 0b0011
      uint b = 4; // 0b0100
    
      uint c = a | b; // 0b0111
      return c; // 7
  }
  function fei() public pure returns (uint8) {
      uint8 a = 3; // 0b00000011
      uint8 c = ~a; // 0b11111100
      return c; // 0
  }
  
  function yihuo() public pure returns (uint) {
      uint a = 3; // 0b0011
      uint b = 4; // 0b0100
    
      uint c = a ^ b; // 0b0111
      return c; // 252
  }
}pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract Math {
  function leftShift() public pure returns (uint8) {
      uint8 a = 8; // 0b00001000
      uint8 c = a << 2; // 0b00100000
      return c; // 32
  }
  function rightShift() public pure returns (uint8) {
      uint8 a = 8; // 0b00001000
      uint8 c = a >> 2; // 0b00000010
      return c; // 2
  }
}
 
 a << n 表示a的二进制位向左移动n位,在保证位数没有溢出的情况下等价于 a乘以2的n次方。
 a >> n 表示a的二进制位向右移动n位,在保证位数没有溢出的情况下等价于 a除以2的n次方。
  
string 字符串类型,字符串可以通过""或者''来定义字符串的值
pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract StringTest {
    string name;
    
    function StringTest() public{
        name = "default";
    }
    function setName(string _name) public{
        name = _name;
    }
    function getName() public view returns(string){
        return name;
    }
}在 Solidity 中想获得字符串长度必须转成 bytes 类型然后使用 length 属性获得。bytes(string).length
pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract StringTest {
    
    
    string public name = "http://www.netkiller.cn";
    
    function nameBytes() public constant returns (bytes) {
        
        return bytes(name);
    }
    
    function nameLength() public constant returns (uint) {
        
        return bytes(name).length;
    }
    function length(string _name) public pure returns (uint) {
        
        return bytes(_name).length;
    }
    
}| 提示 | |
|---|---|
注意:汉字采用UTF8编码,一个汉字等于3个字节,当你使用 length("景峯") 测试时会返回长度 6。  | 
bool: 可能的取值为常量值true和false。支持的运算符:
! 逻辑非 && 逻辑与 || 逻辑或 == 等于 != 不等于 bool a = true; bool b = !a; // a == b -> false // a != b -> true // a || b -> true // a && b -> false
bytes names = "netkiller" bytes9 _names = "netkiller"; bytes(name)[0] = 0xFF; bytes memory _tmp = new bytes(3); _tmp[0] = 0x4e; _tmp[1] = 0x65; _tmp[2] = 0x6f;
pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract BytesTest {
    
    bytes names = "netkiller";
    
    function get() public view returns (bytes) {
        
        return names;
    }
    function getBytes2() public pure returns (bytes2) {
        bytes9 _names = "netkiller";
        return bytes2(_names);
    }
    function bytesToString() public constant returns (string) {
        
        return string(names);
    }
   
    function copyBytes(bytes b) public pure returns (bytes) {
       
       bytes memory tmp = new bytes(b.length);
       
       for(uint i = 0; i < b.length; i++) {
           
           tmp[i] = b[i];
       }
       
       return tmp;
    }
    
    function bytesToString2() public pure returns (string) {
        bytes memory _tmp = new bytes(3);
        _tmp[0] = 0x4e;
        _tmp[1] = 0x65;
        _tmp[2] = 0x6f;
        return string(_tmp);
    }
   
}.length可以动态修改字节数组的长度
pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract BytesTest2 {
    
    // 初始化一个两个字节空间的字节数组
    bytes public array = new bytes(2);
    
    // 设置修改字节数组的长度
    function setLength(uint _len) public {
        array.length = _len;
    }
    
    // 返回字节数组的长度
    function getLength() constant public returns (uint) {
        return array.length;
    }
    
    // 往字节数组中添加字节
    function pushArray(byte _tmp) public{
        array.push(_tmp);
    }
    
}//创建一个memory的数组 uint[] memory a = new uint[](7); uint[] x = [uint(1), 3, 4]; bytes memory b = new bytes(10);
二维数组
uint [2][3] T = [[1,2],[3,4],[5,6]];
pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract ArrayTest {
    
    uint [] array = [1,2,3,4,5];
    
    // 通过for循环计算数组内部的值的总和
    function sum() constant public returns (uint) {
        uint num = 0;
        for(uint i = 0; i < array.length; i++) {
            num = num + array[i];
        }
        return num;
    }
    
    function sumNumbers(uint[] _numbers) public pure returns (uint) {
        uint num = 0;
        for(uint i = 0; i < _numbers.length; i++) {
            num = num + _numbers[i];
        }
        return num;
    }
    
}.length 属性是活动数组的尺寸
pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract ArrayLength {
    
    uint [] array = [1,2,3,4,5];
    
    function getLength() public constant returns (uint) {
        
        return array.length;
    }
    
}通过 push 可以向数组中添加数据
pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract ArrayLength {
    
    uint [] array = [1,2,3,4,5];
    
    function pushArray() public {
        
        array.push(6);
    }
    
    function getLength() public constant returns (uint) {
        
        return array.length;
    }
    
}State 就是一个自定义的整型,当枚举数不够多时,它默认的类型为uint8,当枚举数足够多时,它会自动变成uint16,枚举下标定义从左至右从零开始。
New=0, Pending=1, Done=2, Deleted=3
访问枚举方式 State.New 实际等于数字 0
pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract EnumTest {
    enum State { New, Pending, Done, Deleted }
    State state = State.New;
    function set(State _state) public {
        state = _state;
    }
    function get() constant public returns (State) {
        return state;
    }
}枚举用来定义状态
pragma solidity ^0.4.0;
contract Purchase {
    enum State { Created, Locked, Inactive } // Enum
}定义结构体
struct Voter {
        uint weight; // weight is accumulated by delegation
        bool voted;  // if true, that person already voted
        address delegate; // person delegated to
        uint vote;   // index of the voted proposal
    }
    // This is a type for a single proposal.
    struct Proposal {
        bytes32 name;   // short name (up to 32 bytes)
        uint voteCount; // number of accumulated votes
    }演示例子
pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract Students {
    
    struct Person {
        string name;
        uint age;
        uint class;
        
    }
    Person person = Person("Neo",18,1);
    function getPerson() public view returns(string){
        return person.name;
    }
}address public minter;
下面是一个获得账号余额的例子。
pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract AddressTest{
    
    function getBalance(address _addr) public constant returns (uint){
        return _addr.balance;
    }
}mapping 就是图数据结构,由 key 和 value 组成。
pragma solidity ^0.4.20;
//Author: netkiller <netkiller@msn.com>
//Home: http://www.netkiller.cn
contract MappingExample {
    
    mapping(uint => string) map;
    function put(uint key, string value) public {
        map[key] = value;
    }
    
    function get(uint key) constant public returns (string) {
        return map[key];
    }
}“Solidity数据类型有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。