区块链:Solidity值类型(布尔Boolens&整型Integer)

Solidity Types

布尔(Booleans)

bool: 可能的取值为常量值truefalse

支持的运算符:

  • ! 逻辑非
  • && 逻辑与
  • || 逻辑或
  • == 等于
  • != 不等于

备注:运算符&&||是短路运算符,如f(x)||g(y),当f(x)为真时,则不会继续执行g(y),在f(x)&&g(y)表达式中,当f(x)为false时,则不会执行g(y)

bool a = true;
bool b = !a;

// a == b -> false
// a != b -> true
// a || b -> true
// a && b -> false
整型Integer

int/uint:变长的有符号无符号整型。变量支持的步长以8递增,支持从uint8uint256,以及int8int256。需要注意的是,uintint默认代表的是uint256int256

什么是有符号整型,什么是无符号整型

无符号整型(uint)是计算机编程中的一种数值资料型别。有符号整型(int)可以表示任何规定范围内的整数无符号整型(uint)只能表示非负数(0及正数)

有符号整型能够表示负数代价是其能够存储正数的范围的缩小一半,因为其约一半的数值范围要用来表示负数。如:uint8的存储范围为0 ~ 255,而int8的范围为-127 ~ 127

如果用二进制表示:

  • uint8: 0b00000000 ~ 0b11111111,每一位都存储值,范围为0 ~ 255
  • int8:0b11111111 ~ ob01111111,最左一位表示符号,1表示0表示,范围为-127 ~ 127

支持的运算符

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

contract Math {

 //加 +
 function add(int a, int b) constant returns (int) {

      int c = a + b;
      return c;
  }
  //减 -
  function sub(int a, int b) constant returns (int) {

      return a - b;
  }

  //乘 *
  function mul(int a, int b) constant returns (int) {

      int c = a * b;
      return c;
  }

  //除 /
  function div(int a, int b) constant returns (int) {

      int c = a / b;
      return c;
  }

  //取余
  function m(int a, int b) constant returns (int) {

      int c = a % b;
      return c;
  }

  //次方 **
  function m(uint a, uint b) constant returns (uint) {

      uint c = a**b;
      return c;
  }

  //与 &
  function yu() constant returns (uint) {

      uint a = 3; // 0b0011
      uint b = 4; // 0b0100

      uint c = a & b; // 0b0000
      return c; // 0
  }

  //或 |
  function huo() constant returns (uint) {

      uint a = 3; // 0b0011
      uint b = 4; // 0b0100

      uint c = a | b; // 0b0111
      return c; // 7
  }

  //非 ~
  function fei() constant returns (uint8) {

      uint8 a = 3; // 0b00000011
      uint8 c = ~a; // 0b11111100
      return c; // 252
  }

  //异或 ^
  function yihuo() constant returns (uint) {

      uint a = 3; // 0b0011
      uint b = 4; // 0b0100

      uint c = a ^ b; // 0b0111
      return c; // 7
  }

  //位移 左移
  function leftShift() constant returns (uint8) {

      uint8 a = 8; // 0b00001000
      uint8 c = a << 2; // 0b00100000
      return c; // 32
  }

  //位移 右移
  function rightShift() constant 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次方

整数字面量

整数字面量,由包含0-9的数字序列组成,默认被解释成十进制。在Solidity中不支持八进制,前导0会被默认忽略,如0100,会被认为是100,【PS:十六进制可以这么写,0x11】。

小数由.组成,在他的左边或右边至少要包含一个数字。如1..11.3均是有效的小数。

pragma solidity ^0.4.4;

contract IntegerLiteral{
  function integerTest1() constant returns (uint) {

    var i = (2**800 + 1) - 2**800;
    return i;
  }

  function integerTest2() constant returns (uint) {

    var j = 2/4.0*10;
    return j;
  }

  function integerTest3() constant returns (uint) {


    var k = 0.5*8;
    return k;
  }

  function integerTest4() constant returns (uint) {

    var c = 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222 - 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;

    return c;
  }

}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值