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

news2024/11/25 4:20:37

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.coloradmin.cn/o/1173826.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统提示缺少或找不到d3dcompiler_43.dll文件的详细修复教程

今天我来给大家分享一下关于d3dcompiler_43.dll缺失的4个修复方法。 首先,我们来了解一下d3dcompiler_43.dll的作用。它是DirectX中的一个组件,用于编译Shader和Pixel着色器代码。如果缺少了这个文件,就会导致游戏或应用程序无法正常运行。 …

操作系统复习(2)进程管理

一、概述 1.1程序的顺序执行 一个具有独立功能的程序独占CPU运行,直至得到最终结果的过程称为程序的顺序执行。 程序的并发执行所表现出的特性说明两个问题 ⑴ 程序和计算机执行程序的活动不再一一对应 ⑵ 并发程序间存在相互制约关系(要求共享信息&…

Docker容器中执行throttle.sh显示权限报错:RTNETLINK answers: Operation not permitted

在模拟通信环境时,我执行了一下命令: bash ./throttle.sh wan但是,出现了权限的报错:RTNETLINK answers: Operation not permitted 解决方案说简单也挺简单,只需要两步完成。但是其实又蛮繁琐,因为需要将…

伪随机序列——m序列及MATLAB仿真

文章目录 前言一、m 序列1、m 序列的产生2、m 序列的性质①、均衡性②、游程分布③、移位相加特性④、自相关函数⑤、功率谱密度⑥、伪噪声特性 二、M 序列1、m 序列的产生2、m 序列的性质 三、MATLAB 中 m 序列1、m 序列生成函数的 MATLAB 代码2、MATLAB 仿真 前言 在通信系统…

15 _ 二分查找(上):如何用最省内存的方式实现快速查找功能?

今天我们讲一种针对有序数据集合的查找算法:二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,很多非计算机专业的同学很容易就能理解,但是看似越简单的东西往往越难掌握好,想要灵活应用就更加困难。 老规矩,我们还是来看一道思考题。 假设我们…

【Android】Android Framework系列---CarPower深度睡眠STR

Android Framework系列—CarPower深度睡眠 之前博客的说说CarPower的开机启动流程 这里分析一下,Android CarPower实现深度睡眠的流程。 首先,什么是深度睡眠(Deep Sleep)? Android进入Deep Sleep后,关闭屏幕、关闭CPU的电源,保…

【Head First 设计模式】-- 观察者模式

背景 客户有一个WeatherData对象,负责追踪温度、湿度和气压等数据。现在客户给我们提了个需求,让我们利用WeatherData对象取得数据,并更新三个布告板:目前状况、气象统计和天气预报。 WeatherData对象提供了4个接口: …

【0基础学Java第七课】-- 类和对象01

7. 类和对象 7.1 面向对象的初步认知7.1.1 什么是面向对象7.1.2 面向对象与面向过程 7.2 类定义和使用7.2.1 简单认识类7.2.2 类的定义格式7.2.3 定义一个狗类7.2.4 定义一个学生类 7.3 类的实例化7.3.1 什么是实列化7.3.2 引用只能指向对象,且不能同时指向多个对象…

C#使用随机数模拟英雄联盟S13瑞士轮比赛

瑞士轮赛制的由来 瑞士制:又称积分循环制,最早出现于1895年在瑞士苏黎世举办的国际象棋比赛中,故而得名。其基本原则是避免种子选手一开始就交锋、拼掉,是比较科学合理、用得最多的一种赛制;英语名称为Swiss System。…

微信内H5页面唤醒App

首先,简述一下这个需求的背景,产品希望能够让用户在微信内,打开一个h5页面,然后就能唤醒公司中维护的app,这个是为了能够更好的引流。 唤醒app的三种方案 IOS系统-Universal Link(通用链接) …

invoke方法传参String数组问题——wrong number of arguments

invoke方法传参String数组问题——wrong number of arguments 问题描述一、案例准备二、错误反射调用实例三、正确反射调用实例 问题描述 今天笔者在使用invoke方法的时候,发现报了一个这样一个错:“wrong number of arguments”,在网上冲浪…

【Python】-- python的基本图像处理(图像显示、保存、颜色变换、缩放与旋转等)

目录 一、图像文件的读写 操作步骤: 显示图像文件的三个常用属性: 例: 二、图像文件的处理 常用的图像处理方法 1、图像的显示 2、图像的保存 3、图像的拷贝与粘贴 4、图像的缩放与旋转 5、图像的颜色变换 6、图像的过滤与增强 7、序…

【MySQL】用户管理权限控制

文章目录 前言一. 用户管理1. 创建用户2. 删除用户3. 修改用户密码 二. 权限控制1. 用户授权2. 查看权限3. 回收权限 结束语 前言 MySQL的数据其实也以文件形式保存,而登录信息同样保存在文件中 MySQL的数据在Linux下默认路径是/var/lib/mysql 登录MySQL同样也可以…

全网超细,Pytest自动化测试框架入门到精通-实战整理,一篇打通...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、Pytest和Unitt…

交叉编译程序:以 freetype 为例

1 程序运行的一些基础知识 1.1 编译程序时去哪找头文件? 系统目录:就是交叉编译工具链里的某个 include 目录;也可以自己指定:编译时用 “ -I dir ” 选项指定。 1.2 链接时去哪找库文件? 系统目录&#…

二叉树OJ练习题(C语言版)

目录 一、相同的树 二、单值二叉树 三、对称二叉树 四、树的遍历 前序遍历 中序遍历 后序遍历 五、另一颗树的子树 六、二叉树的遍历 七、翻转二叉树 八、平衡二叉树 一、相同的树 链接:100. 相同的树 - 力扣(LeetCode) bool isSameTree(…

前端框架Vue学习 ——(一)快速入门

文章目录 Vue 介绍Vue快速入门 Vue 介绍 Vue 是一套前端框架,免除原生 JavaScript 中的 DOM 操作,简化书写。基于 MVVM (Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。官网: https://v2.cn.vuejs.or…

Flow-based models(NICE);流模型+NICE+代码实现

参考: 李宏毅春季机器学习NICE: Non-linear Independent Components Estimationhttps://github.com/gmum/nice_pytorch 文章目录 大致思想数学预备知识Jacobian矩阵行列式以及其几何意义Change of Variable Theorem Flow-based modelNICE理论代码 大致思想 Flow-B…

【Linux系统化学习】开发工具——gdb(调试器)

个人主页点击直达:小白不是程序媛 Linux专栏:Linux系统化学习 个人仓库:Gitee 目录 前言: gdb版本检查和安装 Debug和Release gdb的使用 其他指令 前言: 前几篇文章分别介绍了在Linux下的代码编辑器、编译器。…

c面向对象编码风格(上)

面向对象和面向过程的基本概念 面向对象和面向过程是两种不同的编程范式,它们在软件开发中用于组织和设计代码的方式。 面向过程编程(Procedural Programming)是一种以过程(函数、方法)为核心的编程方式。在面向过程…