跳到主要内容

数据类型

整型

使用 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 取值范围是 [0, 255][0, \ 255], 即 [0, 281][0, \ 2^8 - 1]。同理,uint16 占据两个字节的空间,取值范围是 [0, 2161][0, \ 2^{16} - 1]

uint 类型占据最大空间的是使用 uint256 定义,占据 32 字节。取值范围是 [0, 22561][0, \ 2^{256} - 1]

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 声明,可赋值为 truefalse,占据 1 个字节。

bool boo = true; // or false

地址

使用 address 声明,默认值为 0x0000000000000000000000000000000000000000

address addr = 0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c;

枚举类型

使用 enum 声明

// 枚举定义
enum Status {
Pending,
Shipped,
Accepted,
Rejected,
Canceled
}
Status status;

数组

array 数组类型, 支持方法 pushpopgetdelete

// 数组定义
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;