常用数据类型

这是这篇教程的第一章,我们会通过一些简短的文字来简单讲述Solitidy中常用的数据类型,并且通过几个测试来检验成果。


常见数据类型

和一般的编程语言不同,Solidity中并没有浮点数的标准实现,也就是没有float,和double这种类型。而我们常见的类型有。

  • boolean 布尔值
  • uintN 无符号整数
  • intN 有符号整数
  • address 地址类型
  • bytesN 字节数组

你肯定会疑惑,在Solidity如何表示浮点数,当然,这也是大家头痛的地方,于是出现了非常多的替代实现,不过这不是本章重点。

boolean 布尔值

boolean类型是计算机中的基石,你可以认为这个可以用0和1表示的数据类型造就了整个计算机体系。
boolean类型的声明方式如下。

Loading ~~

在Solidity中,如果你对一个变量没有进行赋值,那么他会自动初始化为0数据状态。也就是说,bool会被初始化为false,而int会被初始化为0。

uint 无符号整数

uint其实是uint256的别名,一般情况下,我们都会使用uint来储存一个无符号整数,也就是正整数。
当然,uint还有其他的兄弟类型,比如uint8,uint16,uint24.....uint256。他们分别表示的是储存大小不同的uint值。他们的规律是,数据大小都是8的倍数,也就是一个字节。
比如

  • uint8 的取值范围为 0 ~ 28 - 1
  • uint24 的取值范围为 0 ~ 224 - 1
  • ...
  • uint256 的取值范围为 0 ~ 2256 - 1
Loading ~~

int 有符号类型

int类型基本和uint一致,包括兄弟类型等等,唯一不同的就是取值范围,比如int256的取值范围为 -2255 ~ 2255 - 1

Loading ~~

int和uint最大的区别是,uint的最小值是0,而int的最小值是负数。不过在大部分情况下Solidity中的整数都会使用uint来表示。

address 地址类型

地址类型是一种非常常见的类型,但是在进行赋值的时候需要注意,Solidity中认为长度为40个字符的,并且符合checksum规则的数据为address。

Loading ~~

bytes 字节数组

bytes是一种特殊的数据结构,bytes的类型有byte,bytes1,bytes2 ... bytes32。在计算机中一个字节长度为8,其实这里是可以和uint的数据进行对应的。例如

  • bytes1 -> uint8
  • bytes2 -> uint16
  • ...
  • bytes32 -> uint256 在强制转换的情况下,对应长度的数据可以随意转换。同时,bytes也可以和int进行转换,不过我们一般不这么做。

小贴士

bytes并不是bytes32的别名,bytes表示的是非定长的字节数组。也就是动态长度字节数组。关于Bytes的声明方式,后续会展开说明。

Loading ~~

习题

请将下方合约按照注释内容完善
Loading ~~