数据类型
整型
使用 uint/int
定义无符号和有符号的整型变量。并根据取值范围可以定义
uint8
,uint16
,uint32
,uint64
,uint128
,uint256
int8
,int16
,int32
,int64
,int128
,int256
uint8
占据 1 个字节,1 个字节等于 8 位,即 8 个二进制的 0 或 1
最大值是这 8 个位置全是 1,即 11111111,转成十进制的值为 255
最小值是这 8 个位置全是 0,即 00000000,转成十进制的值为 0
故 uint8
取值范围是 , 即 。同理,uint16
占据两个字节的空间,取值范围是 。
uint
类型占据最大空间的是使用 uint256
定义,占据 32 字节。取值范围是 。
uint8 u8 = 1;
uint u256 = 456;
uint u = 123; // uint 默认是 uint256
// int 默认0
int8 i8 = type(int).min; // type(int).max
int i256 = 456;
int i = -123; // int 定义默认是 int256
布尔
使用 bool
声明,可赋值为 true
或 false
,占据 1 个字节。
bool boo = true; // or false
地址
使用 address
声明,默认值为 0x0000000000000000000000000000000000000000
address addr = 0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c;
枚举类型
使用 enum
声明
// 枚举定义
enum Status {
Pending,
Shipped,
Accepted,
Rejected,
Canceled
}
Status status;
数组
array
数组类型, 支持方法 push
、pop
、get
、delete
等
// 数组定义
uint[] public arr;
uint[] public arr2 = [1, 2, 3];
uint[10] public myFixedSizeArr; // 固定数组长度
arr.length // 获取数组长度
arr2[1] // 访问数组元素
arr2[1] = 100 // 设置数组元素 [1, 100, 3]
delete arr2[1] // 删除数组元素 [1, 0, 3], 不会真正的删除,只会置空
mapping
mapping
类型,为key-value
结构。支持嵌套
// mapping 定义
mapping(address => uint) public myMap;
myMap[_addr] = 0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c; // map赋值
mapping(address => mapping(uint => bool)) public nested; // 嵌套map
struct
struct
结构体
// 结构体定义
struct Todo {
string text;
bool completed;
}
// 声明结构体类型变量
Todo public todo;
Todo[] public todos;
todo = Todo('a', true)
todo = Todo({ text: 'A', completed: true })
todo.completed = false;