Solidity Types
布尔(Booleans)
bool:
可能的取值为常量值true
和false
。
支持的运算符:
!
逻辑非&&
逻辑与||
逻辑或==
等于!=
不等于
备注:运算符&&
和||
是短路运算符,如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
递增,支持从uint8
到uint256
,以及int8
到int256
。需要注意的是,uint
和int
默认代表的是uint256
和int256
。
什么是有符号整型,什么是无符号整型
无符号整型(uint)
是计算机编程中的一种数值资料型别。有符号整型(int)
可以表示任何规定范围内的整数
,无符号整型(uint)
只能表示非负数(0及正数)
。
有符号整型能够表示负数
的代价
是其能够存储正数的范围的缩小一半,因为其约一半的数值范围要用来表示负数。如:uint8
的存储范围为0 ~ 255
,而int8
的范围为-127 ~ 127
如果用二进制表示:
- uint8: 0b
00000000
~ 0b11111111
,每一位都存储值,范围为0 ~ 255
- int8:0b
11111111
~ 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.
,.1
,1.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;
}
}