Solidity数据类型全解析:从值类型到引用类型 - 实践

这是一个非常全面的 Solidity 数据类型列表。下文将对这些类型进行详细的、系统化的讲解,并辅以代码示例,特别会澄清一些容易混淆的概念。

一、值类型

值类型在赋值或传递参数时,总是进行值拷贝。这意味着修改副本不会影响原始数据。

1. 布尔类型 (bool)
  • 取值truefalse
  • 运算符
    • 逻辑运算符: !(逻辑非), &&(逻辑与), ||(逻辑或)。
    • 比较运算符: ==(等于), !=(不等于)。
  • 重要提示: Solidity 不支持其他类型到 bool 的隐式转换(不像 JavaScript 或 C)。
bool public isActive = true;
bool public isCompleted = false;
function logicOperations(bool a, bool b) public pure returns (bool, bool, bool) {
    return (!a, a && b, a || b); // 逻辑非、与、或
}
2. 整型 (int / uint)

这是最常用的类型。

  • uint: 无符号整数,表示非负数。
  • int: 有符号整数,表示正数、负数和零。
  • 大小: 从 8 到 256,以 8 为步长(如 uint8, uint16, …, uint256)。
  • uintintuint256int256 的别名
  • 运算符
    • 比较: <=, <, ==, !=, >=, > (返回 bool
    • 位运算: &(与), |(或), ^(异或), ~(按位取反)
    • 算术: +, -, *, /, %(取模), **(幂)
    • 移位: <<(左移), >>(右移)
uint8 public count = 255;
int public balance = -100;
function demo() public view {
    // 溢出检查(Solidity ^0.8.0+)
    // uint8 max = 255;
    // count = max + 1; // 这会导致交易回滚 (REVERT)
    // 使用 unchecked 块禁用溢出检查(节省Gas,但需谨慎)
    unchecked { count = count + 1; } // 结果: 0
}
3. 地址类型 (address)

存储一个 20 字节的 Ethereum 地址。

  • address: 普通地址。
  • address payable: 可支付地址,比 address 多两个成员: transfersend。用于接收 Ether。
posted @ 2025-12-15 18:12  clnchanpin  阅读(28)  评论(0)    收藏  举报