当前位置: 首页 > news >正文

【Solidity】Solidity中的基本数据类型和复合数据类型

1. 基本数据类型

1.1 整数类型

Solidity支持有符号整数和无符号整数,可以指定位数和范围。以下是一些整数类型的示例:

int:有符号整数,可以是正数或负数。2,-45,2023
uint:无符号整数,只能是正数。2,6,2022
int8、int16、int32、int64、int128:有符号整数,指定位数。
uint8、uint16、uint32、uint64、uint128:无符号整数,指定位数。

这里的知识和普通的编程语言类似,比如int8就代表最大能够存储一个8位的整数,它的范围也就是-128 到127(-2^7 到 2^7-1)。其中一个比特用来表示符号(正或负),而其他7个比特用来表示整数值。这使得 int8 可以表示2^7(128)个不同的整数值,分别对应于 -128 到 127。基础的知识就不再赘述了。为什么solidity中对于这种数据类型有着如此精细的划分呢?因为在执行合约的时候是需要消耗gas的,占用不用的为就意味着执行需要消耗不同的gas,因此我们在使用的时候有必要根据自己存储的数字的范围来选取最合适的类型

在remix上写一个合约:
在这里插入图片描述
ctrl + s编译后,部署运行:

public修饰的属性我们可以直接查看,具体的修饰符后面详细说明。注意solidity中的hash操作,authorHash = keccak256(abi.encode(_name, _age, _sal));

1.2 布尔类型、地址类型

bool,表示真或假,true or false。这里就不用再多说了。

地址类型是不是和我们平时的c里面的地址一样呢?并不是的,在silidity中的地址类型address,用于存储Ethereum地址。可以包含合约地址或外部账户地址。也就是这个地址类型就像是代表了我们的银行卡号。比如:0xcb76b7d9a3458ef540ade6068dfe2f44e8ff745f

1.3 string、bytex、bytes、byte

string 用于文本数据,bytex 用于固定大小的字节数组,申明的时候在后面跟上数字表示位数,而 bytes 用于动态大小的字节数组,而byte就表示字节类型,用于存储一个字节。这些数据类型在智能合约中用于存储和处理不同种类的数据,根据需要选择适当的类型。需要注意的是,合约中的数据存储和操作都需要谨慎处理,以避免安全问题和不必要的消耗。

2. 复合类型

2.1 结构体

在Solidity中,结构体(Struct)是一种用户自定义的数据类型,用于将多个不同类型的变量组合成一个单一的数据结构。结构体允许你创建具有多个字段的自定义数据类型,用于表示复杂的数据记录。

定义:

struct Person {string name;uint age;
}

实例化:

Person public alice = Person("Alice", 30);
Person public bob;
bob.name = "Bob";
bob.age = 25;

2.2 数组

solidity的数组和其他语言的数组很类似,Solidity 支持不同类型的数组,包括静态数组和动态数组。静态数组具有固定大小,而动态数组的大小可以在运行时动态分配。

静态数组:type[size],其中 type 表示数组中元素的数据类型,而 size 表示数组的大小。
// uint[5] public staticArray; // 具有5个整数元素的静态数组

动态数组的大小不是在声明时确定的,可以在运行时动态添加或删除元素。它的声明形式为 type[]。
uint[] public dynamicArray; // 动态整数数组

数组支持各种操作和属性,包括 .push() 用于在动态数组的末尾添加元素,.length 用于获取数组的长度,以及索引访问等。
动态数组的元素可以通过索引进行访问,如 dynamicArray[0]

结构体数组

struct Person {string name;uint age;
}Person[] public people; // 包含自定义结构体的动态数组

solidity也支持多维数组:uint[][3] public twoDimensionalArray; // 二维整数数组,包含3个子数组
在这里插入图片描述在这里插入图片描述

http://www.lryc.cn/news/218816.html

相关文章:

  • Flutter Set存储自定义对象时 如何保证唯一
  • Docker容器中执行throttle.sh显示权限报错:RTNETLINK answers: Operation not permitted
  • 【Linux】jdk、tomcat、MySQL环境搭建的配置安装,Linux更改后端端口
  • 【WinForm详细教程七】WinForm中的DataGridView控件
  • SpringCloudTencent(上)
  • linux硬盘挂载(linux 修改某个磁盘挂载到新目录)
  • hdlbits系列verilog解答(always块case语句)-33
  • 3D医学三维技术影像PACS系统源码
  • python 之softmx 函数
  • 第3章_基本select语句
  • GPT3.5+文心一言+chatGLM 计算和代码生成能力简单对比
  • 手搓一个ubuntu自动安装python3.9的sh脚本
  • volte使用方法 nodejs版本切换
  • Oracle安全基线检查
  • @Slf4j将日志记录到磁盘和数据库
  • 2023年中国制糖行业研究报告
  • 从使用的角度看 ByConity 和 ClickHouse 的差异
  • Eureka处理流程
  • 排序算法
  • 华为政企光传输网络产品集
  • 四路IC卡读卡器通信协议
  • JavaFX作业
  • 【使用Python编写游戏辅助工具】第五篇:打造交互式游戏工具界面:PySide6/PyQT高效构建GUI工具
  • 06.Oracle数据备份与恢复
  • 大航海时代Ⅳ 威力加强版套装 HD Version (WinMac)中文免安装版
  • 微信小程序 uCharts的使用方法
  • 面试算法54:所有大于或等于节点的值之和
  • 七月论文审稿GPT第二版:从Meta Nougat、GPT4审稿到LongLora版LLaMA、Mistral
  • PyTorch入门学习(十二):神经网络-搭建小实战和Sequential的使用
  • Linux shell编程学习笔记20:case ... esac、continue 和break语句