罗韭菜的solidity学习(四)整型的坑

整型

  • int / uint : 变长的整型,变量支持以8递增,支持从uint8到uint256,以及int8 到int 256
  • uint和int默认uint256和int256

有符号整型int与无符号整型uint

  • 无符号整型(uint)是计算机编程中的一种数值资料,只能表示0以及正数
  • 有符号整型(int)可以表示任何规定范围内的正数
  • uint 8: 范围为0~255
  • int 8:范围为-127 ~ 127

运算

  • solidity目前不支持double/float,如果是7/2会得到3,无条件舍去
  • 除0抛异常

VAR

  • 注意下面代码中var i <=255的话会报错,原因是var i =0
    此时默认为uint8,所以当i循环到最大值时会出错。
  • 如果改成uint16 i 则i<=255没问题
pragma solidity ^0.4.4;

//uint8 uint16 uint24....uint256
// int8 int16 int24 int32 ... int256

// int => int256
// uint => uint 256

// int8 -> 只有8位 11111111 ~ 01111111
// 第一位为符号 -(1+2+4+8+16+32+64)~ (1+2+4+8+16+32+64) 即 -127 ~ 127
// int16
// 1111111111111111 ~ 011111111111111
// uint8 -> 8
// 00000000 ~ 11111111 0~255

// uint8 0~255
contract Test {
//  function testVar() returns (string) { 这是错的
    function testVar() constant returns (uint8) {
    uint8 a = 100;
    var b = a;
    return b;
  }

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

运算

  • 左移
  • 右移
  • 求幂
pragma solidity ^0.4.4;

contract  Test{
  uint8 a;

  function Test(){
    a=8;
  }

  function qiumi(uint8 b)constant returns(uint8){
    return a ** b; // a的b次方
  }

  function leftShift(uint8 b)constant returns(uint8){
    return a << b;
    // 0000 10000
    // b =2
    // 左移两位
    // 0010 0000
    // 64
  }
    //右移同上
}

字面量

  • 不管实际能存储多少,计算过程中都可以随便计算
    如uint8 只能存储到255,但是uint8 a = 11111111111111111111-11111111111111100 都是可以的。

你可能感兴趣的:(罗韭菜的solidity学习(四)整型的坑)