类型
Solidity是一种静态类型语言,意味着每个变量(本地或状态变量)需要在编译时指定变量的类型(或至少可以推倒出类型)。Solidity提供了一些基本类型可以用来组合成复杂类型。
Solidity类型分为两类:
值类型(Value Type) - 变量在赋值或传参时,总是进行值拷贝。
引用类型(Reference Types)
值类型(Value Type)
布尔类型(Booleans)
整型(Integers)
定长浮点型(Fixed Point Numbers)
定长字节数组(Fixed-size byte arrays)
有理数和整型常量(Rational and Integer Literals)
字符串常量(String literals)
十六进制常量(Hexadecimal literals)
枚举(Enums)
函数类型(Function Types)
地址类型(Address)
地址常量(Address Literals)
下面就类型进行详细介绍
布尔类型(Booleans)
布尔(bool):可能的取值为常量值true和false。
布尔类型支持的运算符有:
!逻辑非
&& 逻辑与
|| 逻辑或
== 等于
!= 不等于
注意:运算符&&和||是短路运算符,如f(x)||g(y),当f(x)为真时,则不会继续执行g(y)。
bool a = true;
bool b = !a;
// a == b -> false
// a != b -> true
// a || b -> true
// a && b -> false
整型(Integers)
int/uint: 表示有符号和无符号不同位数整数。支持关键字uint8 到 uint256 (以8步进),
uint 和 int 默认对应的是 uint256 和 int256。
支持的运算符
比较运算符: <=, < , ==, !=, >=, > (返回布尔值:true 或 false)
位操作符: &,|,^(异或),~(位取反)
算术操作符:+,-,一元运算-,一元运算+,,/, %(取余数), **(幂), << (左移位), >>(右移位)
注意:Solidity中,右移位是和除等价的,因此右移位一个负数,向下取整时会为0,而不像其他语言里为无限负小数。
一、加 +,减 -,乘 *,除 /
这里我随便填一些数字,可以看到,已经正确计算出来了。
二、求余 %
三、与 &,| 或,非 ~,^ 异或
定长浮点型(Fixed Point Numbers)
ixed/ufixed: 表示有符号和无符号的固定位浮点数。关键字为ufixedMxN 和 ufixedMxN。
M表示这个类型要占用的位数,以8步进,可为8到256位。
N表示小数点的个数,可为0到80之间
支持的运算符:
比较运算符: <=, < , ==, !=, >=, > (返回布尔值:true 或 false)
算术操作符:+,-,一元运算-,一元运算+,,/, %(取余数)
注意:它和大多数语言的float和double不一样,*M
是表示整个数占用的固定位数,包含整数部分和小数部分。因此用一个小位数(M较小)来表示一个浮点数时,小数部分会几乎占用整个空间。
字符串常量
字符串常量是指由单引号,或双引号引起来的字符串 (“foo” or ‘bar’)。字符串并不像C语言,包含结束符,”foo”这个字符串大小仅为三个字节。和整数常量一样,字符串的长度类型可以是变长的。字符串可以隐式的转换为byte1,…byte32 如果适合,也会转为bytes或string。
字符串常量支持转义字符,比如\n,\xNN,\uNNNN。其中\xNN表示16进制值,最终转换合适的字节。而\uNNNN表示Unicode编码值,最终会转换为UTF8的序列。