前言
本小节主要介绍一下Solidity编程中的布尔数据类型和整型数据类型这两种,其他的数据类型在之后的内容当中会陆续介绍。
布尔类型(Booleans)
bool(布尔)类型的值有两种:
- true
- flase
支持的运算符有:
- 逻辑与——&&
- 逻辑或——||
- 逻辑非——!
- 等 于——=
- 不等于——!=
bool数据类型的结果经常会被作为条件的判断内容,从而控制条件分支的执行流程。
例如:
pragma solidity ^0.4.0; contract test{ function test1() returns(bool){ return 1>0; } function test2() returns(bool){ return 1<0; } }
整型(Integer)
整型分为:有符号整型和无符号整型。
整型变量的步长以8递增,支持从uint8到uint256,以及int8到int256。需要注意的是,uint和int默认代表的是uint256和int256
支持的运算符:
- 比较运算符:<、<=、==、!=、>、>=,返回值为bool类型
- 位 运 算 符:&、|、^(异或)、~(非)。
- 算 术 运 算:+、-、*、/、**、%
- 位 运 算:<<、>>、
整数除法总是截断的,比如1/4=0。但如果运算符是字面量,则不会截断,例如:var e=1/4。另外除0会抛出异常,我们来看下面的例子:
pragma solidity ^0.4.0; // simple store example contract simpleStorage{ function divide(uint x,uint y) returns (uint z){ z = x / y; } }
移位运算
移位可以分为左移位于右移位。
左移位x<<y相当于执行x*2**y
右移位x>>y相当于执行x/2**y
对一个负数移位会保留符号。
例如:
pragma solidity ^0.4.0; contract IntegerTest{ function shift() returns (int, int, int, int){ var a = -1 << 2;//-4 var b = -1 >> 2;//0 var c = 1 << 2;//4 var d = 1 >> 2;//0 return (a, b, c, d); } }
异常问题
除以0或对0取模,对一个值移负数位会抛出运行时异常。
pragma solidity ^0.4.0; contract IntegerTest{ function exp() { uint a = 1; uint b = 0; //var x = a / b;//VM Exception: invalid opcode int c = -1; //var y = a >> c;//VM Exception: invalid opcode } }
后续内容会陆续更新,敬请期待!