Solidity 数据类型

在用任何语言编写程序时,都需要使用变量来存储各种信息。

变量是内存空间的名称,变量有不同类型,例如整型、字符串类型等等。

操作系统根据变量的数据类型分配内存。

Solidity中,变量类型有以下几大类:

  • 值类型
  • 地址类型
  • 引用类型

 

1. 值类型

字节型bytes8 to bytes328位到32位的字节型数据。

类型 保留字 取值
布尔型 bool true/false
整型 int/uint 有符号整数/无符号整数。
整型 int8 to int256 8位到256位的带符号整型数。int256与int相同。
整型 uint8 to uint256 8位到256位的无符号整型。uint256和uint是一样的。
定长浮点型 fixed/unfixed 有符号和无符号的定长浮点型
定长浮点型 fixedMxN 带符号的定长浮点型,其中M表示按类型取的位数,N表示小数点。M应该能被8整除,从8到256。N可以是0到80。fixed与fixed128x18相同。
定长浮点型 ufixedMxN 无符号的定长浮点型,其中M表示按类型取的位数,N表示小数点。M应该能被8整除,从8到256。N可以是0到80。fixed与fixed128x18相同。

值类型数据:

uint x = 100;
int x = -200;
byte32 b = 0x01020304

我们可以测量类型的最大值和最小值。

// SPDX-License-Identifier: MIT 
pragma solidity ^0.8.0; 

contract Test { 
    uint public a = type(uint).min;
    uint public b = type(uint).max;
}

2. 地址类型

地址类型表示以太坊地址,长度为20字节。地址可以使用 .balance 属性获得余额,也可以使用 .transfer() 方法将余额转到另一个地址。

address x = 0x212;
address myAddress = this;

if (x.balance < 10 && myAddress.balance >= 10) 
    x.transfer(10);

 

3. 引用类型/复合数据类型

Solidity中,有一些数据类型由值类型组合而成,相比于简单的值类型,这些类型通常通过名称引用,被称为引用类型。

引用类型包括:

  • 数组 (字符串与bytes是特殊的数组,所以也是引用类型)
  • struct (结构体)
  • map (映射)

Solidity 支持三种类型的变量:状态变量 – 变量值永久保存在智能合约存储空间中的变量。局部变量 – 变量值仅在函数执行过程中有效的变量,函数退出后,变量无效。全局变量 – ...