编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

「干货」区块链技术分享:Solidity语言(五)

wxchong 2024-09-25 23:21:43 开源技术 41 ℃ 0 评论

上次我们说到了修饰符和view,pure函数,今天我们说一下类型转换的问题。

在我们编程中有时候需要变换数据类型,例如:

uint8 a =7;

uint b =9;

// 将会抛出错误,因为 a * b 返回 uint, 而不是 uint8:

uint8 c = a * b;

// 我们需要将 b 转换为 uint8:

uint8 c = a *uint8(b);

如上,a*b返回的类型是uint,但是当我们尝试使用uint8类型接收时,就会造成潜在的错误,如果把他的数据类型转换为uint8,就可以,编译器也不会报错。

既然说到这里我们就来说一下uint8,uint16,uint32……等,我们之前说过uint是uint256的别名使用uint就是使用uint256。

uint8,uint16,uint32等都是uint的变种,通常情况下我们不会考虑使用uint的变种,因为无论如何定义uint的大小,Solidity为它保留256位的存储空间,例如使用uint8而不是uint不会为你节省任何gas,除非把uint绑定到struct中,如果一个struct中有多个uint打包在一起,从而占用较少的存储空间,当uint定义在一个struct中的时候尽量使用最小的整数子类型,以节约空间,并且将同类型变量放在一起,既:在struct中将变量按照类型依次放置,这样Solidity可以将存储空间最小化。例如:

struct Demo{

uint a;

uint b;

uint8 c;

uint8 d;

uint16 e;

uint16 f;

}

将同类型变量放在一起按照类型依次放置,以上是正确的方式,下面看一个错误的作为对比。

struct Demo2{

uint a;

uint8 b;

uint c;

uint16 d;

uint8 e;

uint32 f;

}

Demo2结构体类型不是依次排序,占用空间比Demo要大,所以我们在写结构体时一定要按照同类型变量放在一起。

最后才是整篇文章的重点

有以下区块链开发技术需求的

记得要联系小氪

不要客气!!!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表