前言
本小节主要介绍一下Solidity编程中的布尔数据类型和整型数据类型这两种,其他的数据类型在之后的内容当中会陆续介绍。
布尔类型(Booleans)
- 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
}
}