【从0学习Solidity】2. 值类型详解

Solidity极简入门: 2. 值类型

在这里插入图片描述

  • 博主简介:不写代码没饭吃,一名全栈领域的创作者,专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构,分享一些项目实战经验以及前沿技术的见解。
  • 关注我们的主页,探索全栈开发,期待与您一起在移动开发的世界中,不断进步和创造!
  • 本文收录于 不写代码没饭吃 的学习汇报系列,大家有兴趣的可以看一看。
  • 欢迎访问我们的微信公众号:不写代码没饭吃,获取更多精彩内容、实用技巧、行业资讯等。您关注的是我们前进的动力!

Solidity中的变量类型

  1. 值类型(Value Type):包括布尔型,整数型等等,这类变量赋值时候直接传递数值。

  2. 引用类型(Reference Type):包括数组和结构体,这类变量占空间大,赋值时候直接传递地址(类似指针)。

  3. 映射类型(Mapping Type): Solidity中存储键值对的数据结构,可以理解为哈希表

我们将仅介绍常用类型,不常用的类型不会涉及,本篇将介绍值类型。

值类型

1. 布尔型

布尔型是二值变量,取值为 truefalse

    // 布尔值bool public _bool = true;

布尔值的运算符包括:

  • ! (逻辑非)
  • && (逻辑与,“and”)
  • || (逻辑或,“or”)
  • == (等于)
  • != (不等于)
    // 布尔运算bool public _bool1 = !_bool; // 取非bool public _bool2 = _bool && _bool1; // 与bool public _bool3 = _bool || _bool1; // 或bool public _bool4 = _bool == _bool1; // 相等bool public _bool5 = _bool != _bool1; // 不相等

在上述代码中:变量 _bool 的取值是 true_bool1_bool 的非,为 false_bool && _bool1false_bool || _bool1true_bool == _bool1false_bool != _bool1true

值得注意的是:&&|| 运算符遵循短路规则,这意味着,假如存在 f(x) || g(y) 的表达式,如果 f(x)trueg(y) 不会被计算,即使它和 f(x) 的结果是相反的。

2. 整型

整型是 Solidity 中的整数,最常用的包括:

    // 整型int public _int = -1; // 整数,包括负数uint public _uint = 1; // 正整数uint256 public _number = 20220330; // 256位正整数

常用的整型运算符包括:

  • 比较运算符(返回布尔值): <=<==!=>=>
  • 算数运算符: +-*/%(取余),**(幂)
    // 整数运算uint256 public _number1 = _number + 1; // +,-,*,/uint256 public _number2 = 2**2; // 指数uint256 public _number3 = 7 % 2; // 取余数bool public _numberbool = _number2 > _number3; // 比大小

大家可以运行一下代码,看看这 4 个变量分别是多少。

3. 地址类型

地址类型(address)有两类:

  • 普通地址(address): 存储一个 20 字节的值(以太坊地址的大小)。
  • payable address: 比普通地址多了 transfersend 两个成员方法,用于接收转账。

我们会在之后的章节更加详细地介绍 payable address。

    // 地址address public _address = 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71;address payable public _address1 = payable(_address); // payable address,可以转账、查余额// 地址类型的成员uint256 public balance = _address1.balance; // balance of address

4. 定长字节数组

字节数组分为定长和不定长两种:

  • 定长字节数组: 属于值类型,数组长度在声明之后不能改变。根据字节数组的长度分为 bytes1, bytes8, bytes32 等类型。定长字节数组最多存储 32 bytes 数据,即bytes32
  • 不定长字节数组: 属于引用类型(之后的章节介绍),数组长度在声明之后可以改变,包括 bytes 等。
    // 固定长度的字节数组bytes32 public _byte32 = "MiniSolidity"; bytes1 public _byte = _byte32[0]; 

在上述代码中,MiniSolidity 变量以字节的方式存储进变量 _byte32。如果把它转换成 16 进制,就是:0x4d696e69536f6c69646974790000000000000000000000000000000000000000

_byte 变量的值为 _byte32 的第一个字节,即 0x4d

5. 枚举 enum

枚举(enum)是 Solidity 中用户定义的数据类型。它主要用于为 uint 分配名称,使程序易于阅读和维护。它与 C 语言 中的 enum 类似,使用名称来代替从 0 开始的 uint

    // 用enum将uint 0, 1, 2表示为Buy, Hold, Sellenum ActionSet { Buy, Hold, Sell }// 创建enum变量 actionActionSet action = ActionSet.Buy;

枚举可以显式地和 uint 相互转换,并会检查转换的正整数是否在枚举的长度内,否则会报错:

    // enum可以和uint显式的转换function enumToUint() external view returns(uint){return uint(action);}

enum 是一个比较冷门的变量,几乎没什么人用。

在 Remix 上运行

  • 部署合约后可以查看每个类型的变量的数值:

在这里插入图片描述

  • enumuint 转换的示例:
    在这里插入图片描述

在这里插入图片描述

总结

在这一讲,我们介绍了 Solidity 中值类型,包括布尔型、整型、地址、定长字节数组和枚举。在后续章节,我们将继续介绍 Solidity 的其他变量类型,包括引用类型和映射类型。

在这里插入图片描述

如果这份博客对大家有帮助,希望各位给作者一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!
制作不易,如果大家有什么疑问或给作者的意见,欢迎评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/68678.shtml

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

相关文章

【跟小嘉学 Rust 编程】二十二、常用 API

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…

计算机网络的故事——HTTP报文内的HTTP信息

HTTP报文内的HTTP信息 文章目录 HTTP报文内的HTTP信息一、HTTP 报文二、请求报文及响应报文的结构三、编码提升传输速率 一、HTTP 报文 HTTP报文是由多行&#xff08;CRLF作换行符&#xff09;数据构成的字符串文本&#xff0c;HTTP报文可以分为报文首部和报文主体两部分&…

深度学习笔记

1. 代价函数(cost function)与误差函数(loss function)之间的关系&#xff1a;&#xff0c;其中J为代价函数&#xff0c;L为误差函数&#xff0c;Y为标签矢量&#xff0c;A为根据样本计算矢量。 2. 代价函数J对w和b的导数&#xff1a;推导过程&#xff0c;误差函数以交叉熵 为…

Java“牵手”京东商品价格数据,京东商品历史价格数据接口,京东API接口申请指南

京东平台商品历史价格接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取京东商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片&#xff0c;历史价格&#xff0c;现在的价格等详细信息 。 获取商品价格接口API是一种用于获…

Unity 安卓(Android)端AVProVideo插件播放不了视频,屏幕一闪一闪的

编辑器运行没有问题&#xff0c;但是安卓就有问题&#xff0c;在平板上运行就会报错&#xff1a; vulkan graphics API is notsupported 说不支持Vulkan图形API,解决方法&#xff1a;把Vulkan删除掉

Laravel 表单验证器的常用的2种使用方法

1、使用控制器的 validate 方法进行参数验证 场景一&#xff1a;前后端未分离 /*** 保存一篇新的博客文章。** param Request $request* return Response*/ public function store(Request $request) {$this->validate($request, [title > required|unique:posts|max:2…

聊聊mysql jdbc的prepareStatement

序 本文主要研究一下mysql jdbc的prepareStatement prepareStatement java/sql/Connection.java /*** Creates a <code>PreparedStatement</code> object for sending* parameterized SQL statements to the database.* <P>* A SQL statement with or wit…

SpringBoot之RestTemplate使用Apache的HttpClient连接池

SpringBoot自带的RestTemplate是没有使用连接池的&#xff0c;只是SimpleClientHttpRequestFactory实现了ClientHttpRequestFactory、AsyncClientHttpRequestFactory 2个工厂接口&#xff0c;因此每次调用接口都会创建连接和销毁连接&#xff0c;如果是高并发场景下会大大降低性…

Vue/React 项目部署到服务器后,刷新页面出现404报错

问题描述&#xff1a;在本地启动项目一切正常&#xff0c;部署到服务器上线后出现BUG&#xff0c;项目刷新页面出现404。 起初以为是自己路由守卫或是token丢失问题&#xff0c;找了一圈终于解决了 产生原因&#xff1a;我们打开vue/react打包后生成的dist文件夹&#xff0c;可…

论文开题:成功之门的五大关键策略

研究生、博士生、学者或任何从事研究的人都会面临一个不可避免的环节——论文开题。这一阶段不仅定义了接下来研究的方向&#xff0c;还可能影响到整个项目的成功与否。那么&#xff0c;如何确保你的开题过程能够无瑕通过&#xff0c;还能打动评审人呢&#xff1f;本文将揭示论…

MEMS传感器的原理与构造——单片式硅陀螺仪

一、前言 机械转子式陀螺仪在很长的一段时间内都是唯一的选项&#xff0c;也正是因为它的结构和原理&#xff0c;使其不再适用于现代小型、单体、集成式传感器的设计。常规的机械转子式陀螺仪包括平衡环、支撑轴承、电机和转子等部件&#xff0c;这些部件需要精密加工和…

文件包含漏洞利用的几种方法

文章目录 安装环境启动环境漏洞花式利用蚁剑连接图片马读取敏感文件&#xff08;hosts&#xff09;读取该网站的php源码 代码审计 安装环境 安装phpstudy&#xff0c;下载MetInfo 5.0.4版本软件&#xff0c;复制到phpstudy目录下的www目录中。 打开phpstudy&#xff0c;访问浏…

JVM的故事—— 内存分配策略

内存分配策略 文章目录 内存分配策略一、对象优先在Eden分配二、大对象直接进入老年代三、长期存活的对象将进入老年代四、动态对象年龄判定五、空间分配担保 一、对象优先在Eden分配 堆内存有新生代和老年代&#xff0c;新生代中有一个Eden区和一个Survivor区(from space或者…

恒运资本:北交所股票全红!不到10分钟30%涨停,“认房不认贷”发力了!

今天早盘&#xff0c;A股震荡上扬&#xff0c;上证指数、深证成指等重要股指高开高走&#xff0c;并均涨超1%&#xff0c;两市成交略有增加。 盘面上&#xff0c;房地产、家居用品、煤炭、钢铁等板块涨幅居前&#xff0c;光刻机、软件服务、半导体、机器视觉等板块跌幅居前。北…

【Linux系列】vmware虚拟机网络配置详解

非原创 原文地址[1] 首发博客地址[2] 系列文章地址[3] vmware 为我们提供了三种网络工作模式&#xff0c;它们分别是&#xff1a;Bridged&#xff08;桥接模式&#xff09;、NAT&#xff08;网络地址转换模式&#xff09;、Host-Only&#xff08;仅主机模式&#xff09;。 打开…

【能用Python就可以轻松解决这5个常见运维!】

许多运维工程师会使用 Python 脚本来自动化运维任务。Python 是一种流行的编程语言&#xff0c;具有丰富的第三方库和强大的自动化能力&#xff0c;适用于许多不同的领域。 在运维领域&#xff0c;Python 脚本可以用来实现各种自动化任务&#xff0c;例如&#xff1a; 连接远…

Cyber RT学习笔记---7、Component组件认知与实践

7、Component组件认知与实践 前言 本文是对Cyber RT的学习记录,文章可能存在不严谨、不完善、有缺漏的部分&#xff0c;还请大家多多指出。 课程地址: https://apollo.baidu.com/community/course/outline/329?activeId10200 更多还请参考: [1] Apollo星火计划学习笔记——第…

网络渗透day12-高级问题2

当然&#xff0c;继续提供更多高级网络渗透测试问题和回答&#xff1a; 在渗透测试中&#xff0c;您如何评估目标系统的人工智能&#xff08;AI&#xff09;模型的隐私保护机制&#xff0c;以查找可能的隐私泄露和数据滥用风险&#xff1f; - 回答&#xff1a;我会分析AI模型的…

Web自动化 —— Selenium元素定位与防踩坑

1. 基本元素定位一 from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By # selenium Service("../../chromedriver.exe") # driver webdriver.Chrome(serviceService) # driver.…

【Unity3D】UI Toolkit元素

1 前言 UI Toolkit简介 中介绍了 UI Builder、样式属性、UQuery、Debugger&#xff0c;UI Toolkit容器 中介绍了 VisualElement、ScrollView、ListView、GroupBox 等容器&#xff0c;UI Toolkit样式选择器 中介绍了简单选择器、复杂选择器、伪类选择器等样式选择器&#xff0c;…