尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

WTF-Solidity 值类型详解:布尔、整型、地址、定长字节数组与 Enum 的完整实战

发布时间:2026/9/14 2:54:56

资讯中心
01
ARTICLE

WTF-Solidity 值类型详解:布尔、整型、地址、定长字节数组与 Enum 的完整实战

WTF-Solidity 值类型详解:布尔、整型、地址、定长字节数组与 Enum 的完整实战
WTF-Solidity 值类型详解布尔、整型、地址、定长字节数组与 Enum 的完整实战【免费下载链接】WTF-SolidityWTF Solidity 极简入门教程供小白们使用。Now supports English! 官网: https://wtf.academy项目地址: https://gitcode.com/GitHub_Trending/wt/WTF-Solidity本篇指南基于 WTF-Solidity 教程第 2 讲「值类型」编写围绕 Solidity 中五类最常用的值类型布尔型、整型、地址、定长字节数组、枚举展开逐一给出可部署验证的示例合约代码、运算符语义与 Remix 运行结果。读完后你将能够准确写出并解读 ValueTypes.sol 中的每个变量声明理解短路求值规则、payable地址与普通地址的区别、bytes32的十六进制存储方式以及enum与uint之间的显式转换。Solidity 中的三类变量类型在 Solidity 中变量类型按赋值时的传递方式分为三大类这是理解后续所有章节的基础值类型Value Type包括布尔型、整型等。这类变量赋值时直接传递数值本身。引用类型Reference Type包括数组和结构体。这类变量占空间大赋值时传递的是地址类似指针而非数据本身。映射类型Mapping TypeSolidity 中存储键值对的数据结构可以理解为哈希表。教程刻意只覆盖常用类型不展开冷门特性。本篇聚焦第一类——值类型引用类型与映射类型会留给后续章节数组/结构体见 06_ArrayAndStruct映射见 07_Mapping。完整示例合约ValueTypes.sol本讲的核心示例是 02_ValueTypes/ValueTypes.sol仓库同时保留了 src/02_ValueTypes/ValueTypes.sol 的源码副本内容完全一致合约声明如下// SPDX-License-Identifier: MIT pragma solidity ^0.8.34; contract ValueTypes{ // 布尔值 bool public _bool true; // 布尔运算 bool public _bool1 !_bool; //取非 bool public _bool2 _bool _bool1; //与 bool public _bool3 _bool || _bool1; //或 bool public _bool4 _bool _bool1; //相等 bool public _bool5 _bool ! _bool1; //不相等 // 整数 int public _int -1; uint public _uint 1; uint256 public _number 20220330; // 整数运算 uint256 public _number1 _number 1; // -*/ uint256 public _number2 2**2; // 指数 uint256 public _number3 7 % 2; // 取余数 bool public _numberbool _number2 _number3; //比大小 // 地址 address public _address 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71; address payable public _address1 payable(_address); // payable address可以转账、查余额 // 地址类型的成员 uint256 public balance _address1.balance; // balance of address // 固定长度的字节数组 bytes32 public _byte32 MiniSolidity; // bytes32: 0x4d696e69536f6c69646974790000000000000000000000000000000000000000 bytes1 public _byte _byte32[0]; // bytes1: 0x4d // Enum // 将uint 0 1 2表示为Buy, Hold, Sell enum ActionSet { Buy, Hold, Sell } // 创建enum变量 action ActionSet action ActionSet.Buy; // enum可以和uint显式的转换 function enumToUint() external view returns(uint){ return uint(action); } }从源码结构看合约采用「每个public存储变量由 Solidity 自动生成的 getter 函数」模式所有变量声明为public后部署到 Remix 即可像调用函数一样直接读取每个类型的取值这也是本讲演示的主要方式。合约使用pragma solidity ^0.8.34;与仓库根目录 foundry.toml 中solc 0.8.34的配置保持一致0.8 版本内置整数溢出检查本讲代码在该语义下运行。布尔型bool布尔型是二值变量取值只有true或false// 布尔值 bool public _bool true;布尔值的运算符包括!逻辑非逻辑与and||逻辑或or等于!不等于对应 ValueTypes.sol 中的布尔运算部分// 布尔运算 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 _bool1为false_bool || _bool1为true_bool _bool1为false_bool ! _bool1为true。部署后依次调用各 getter可验证这组结果。短路规则short-circuit evaluation一个值得特别注意的语义细节是和||运算符遵循短路规则。假设存在f(x) || g(y)这样的表达式如果f(x)为true则g(y)不会被计算——即使它的计算结果可能与f(x)相反。同理对于f(x) g(y)如果f(x)为falseg(y)也不会被计算。用本讲代码举例_bool3 _bool || _bool1中由于_bool已经是true编译器在执行「或」运算时右侧的_bool1求值在语义上可以被跳过。所谓「短路规则」一般出现在逻辑与和逻辑或||中当逻辑与的第一个条件为false时就不会再去判断第二个条件当逻辑或的第一个条件为true时就不会再去判断第二个条件。在链式调用外部合约的场景下短路求值还能帮助你省掉一次本不必要的外部调用理解这一点在后续写复杂条件逻辑时非常有用。整型int / uint整型是 Solidity 中的整数类型最常用的写法包括见 ValueTypes.sol// 整型 int public _int -1; // 整数包括负数 uint public _uint 1; // 无符号整数 uint256 public _number 20220330; // 256位无符号整数这里体现了 Solidity 整型的位宽体系int与uint不带数字后缀时默认 256 位也可以显式写成uint256、int256、uint128等任意 8 的倍数位宽。int是有符号整数可存负数uint是无符号整数。常用的整型运算符包括比较运算符返回布尔值、、、!、、算术运算符、-、*、/、%取余、**幂// 整数运算 uint256 public _number1 _number 1; // -*/ uint256 public _number2 2**2; // 指数 uint256 public _number3 7 % 2; // 取余数 bool public _numberbool _number2 _number3; // 比大小这 4 个变量的计算结果可以运行代码亲自验证_number1 2022033120220330 1_number2 42**2_number3 17 % 2的余数_numberbool false4 1为真……注意这里4 1实际为true请以 Remix 实际运行结果为准。运行方式见下文「在 Remix 上运行」一节。地址类型address地址类型有两类见 ValueTypes.sol普通地址address存储一个 20 字节的值即以太坊地址的大小。address payable比普通地址多了transfer和send两个成员方法用于接收/发起转账。// 地址 address public _address 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71; address payable public _address1 payable(_address); // payable address可以转账、查余额 // 地址类型的成员 uint256 public balance _address1.balance; // balance of address两点说明从普通地址到 payable 地址的转换必须显式写出payable(_address)编译器不允许隐式转换——这是 Solidity 强制的安全设计避免意外向未声明可接收 ETH 的地址发钱。地址类型的内置成员.balance读取链上该地址的 ETH 余额本讲用它演示地址的常用成员访问。需要注意的是这里读取的是合约部署那一刻的余额快照作为存储变量初始化值后续余额变化不会自动同步转账方法transfer/send的细节会在 20_SendETH 中详细展开。定长字节数组bytesN字节数组分为定长和不定长两种定长字节数组属于值类型数组长度在声明之后不能改变。根据长度分为bytes1、bytes8、bytes32等类型N 为 1 到 32 的整数。定长字节数组最多存储 32 字节数据即bytes32。不定长字节数组属于引用类型后续章节介绍数组长度在声明之后可以改变包括bytes等。// 固定长度的字节数组 bytes32 public _byte32 MiniSolidity; bytes1 public _byte _byte32[0];在上述代码中字符串MiniSolidity以字节的方式存储进变量_byte32。把它转换成 16 进制就是0x4d696e69536f6c69646974790000000000000000000000000000000000000000MiniSolidity共 12 个字符占前 12 字节其余 20 字节用0x00补齐到 32 字节。_byte变量的值为_byte32的第一个字节即0x4d对应 ASCII 字符M的十六进制编码。从源码结构看这一节正好展示了定长字节数组的两个关键特性可以用下标取单个字节_byte32[0]以及字面量赋值时按左对齐、右补零的规则填充——这些特性在后续 28_Hash 讲keccak256哈希、bytes32签名验证时会被大量复用。枚举enum枚举enum是 Solidity 中用户定义的数据类型主要用于为uint分配名称使程序易于阅读和维护类似 C 语言中的enum使用名称来代替从0开始的uint见 ValueTypes.sol// 用enum将uint 0 1 2表示为Buy, Hold, Sell enum ActionSet { Buy, Hold, Sell } // 创建enum变量 action ActionSet action ActionSet.Buy;即ActionSet.Buy 0、ActionSet.Hold 1、ActionSet.Sell 2。枚举可以显式地和uint相互转换并会检查转换的无符号整数是否在枚举的长度内否则会报错// enum可以和uint显式的转换 function enumToUint() external view returns(uint){ return uint(action); }调用enumToUint()会返回0因为action是ActionSet.Buy。反向转换则写成ActionSet(uint8)的形式若传入的uint超出枚举定义的取值范围编译器会拒绝执行。enum是一个比较冷门的数据类型实际项目中几乎没什么人用但了解它对阅读老代码、理解状态机建模仍有价值。在 Remix 上运行将 ValueTypes.sol 粘贴到 Remix IDEhttps://remix.ethereum.org选择 EVM 版本 0.8.xDeploy 部署到 JavaScript VM 或本地注入的账户部署完成后即可在合约界面查看每个public变量的取值enum和uint转换的验证结果如下——调用enumToUint()返回0与ActionSet.Buy的底层取值一致总结与后续路线本篇是 WTF-Solidity 入门系列第 2 讲完整介绍了 Solidity 中的值类型类型关键字/写法核心要点布尔型bool二值变量/\|\|遵循短路规则整型int/uint/uint256默认 256 位支持比较与算术运算**求幂%取余地址address/address payable20 字节payable地址多出transfer/send方法定长字节数组bytes1~bytes32值类型、长度固定、左对齐右补零枚举enum为uint起别名可显式与uint互转并做范围检查在后续章节中教程将继续介绍引用类型数组与结构体06_ArrayAndStruct和映射类型07_Mapping以及变量初始值08_InitialValue、常量constant/immutable09_Constant等与值类型密切相关的进阶主题。【免费下载链接】WTF-SolidityWTF Solidity 极简入门教程供小白们使用。Now supports English! 官网: https://wtf.academy项目地址: https://gitcode.com/GitHub_Trending/wt/WTF-Solidity创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。