【区块链安全 | 第十四篇】类型之值类型(一)

在这里插入图片描述

Solidity 是一种静态类型语言,这意味着每个变量(无论是状态变量还是局部变量)都需要指定其类型。Solidity 提供了几种基本类型,这些类型可以组合形成复杂类型。

此外,不同类型可以在包含运算符的表达式中相互作用,并且具有优先级的区分。

Solidity 没有“未定义”或“空”值的概念,但新声明的变量总是具有默认值,该默认值取决于其类型。为了处理任何意外的值,应该使用 revert 函数回滚整个交易,或者返回一个带有布尔值的元组,其中第二个 bool 值表示操作是否成功。

值类型

值类型的变量始终按值传递,即在作为函数参数或赋值时总是被复制。

与引用类型不同,值类型的声明不指定数据位置,因为它们足够小,可以存储在栈中。唯一的例外是状态变量,状态变量默认存储在存储中,但也可以标记为 transient、constant 或 immutable。

布尔值

bool:值是 truefalse

整数

int / uint:各种大小的有符号和无符号整数。

关键字 uint8uint256(以 8 为步长,表示 8 位到 256 位的无符号整数),以及 int8int256

uintint 分别是 uint256int256 的别名。

运算符

比较运算符:<=<==!=>=>(结果为 bool

位运算符:&|^(按位异或),~(按位取反)

移位运算符:<<(左移),>>(右移)

算术运算符:+-,一元 -(仅适用于有符号整数),*/%(取模),**(指数运算)

对于整数类型 X,可以使用 type(X).mintype(X).max 来访问该类型可表示的最小值和最大值。

运算符 ||&& 遵循短路规则。这意味着在表达式 f(x) || g(y) 中,如果 f(x) 计算结果为 true,则 g(y) 将不会被计算。

注意
Solidity 中的整数受到特定范围的限制。例如,对于 uint32,其范围为 02**32 - 1

在 Solidity 中,整数运算有两种模式:“溢出”模式(wrapping/unchecked mode)“检查”模式(checked mode)

默认情况下,运算始终处于 “检查”模式,这意味着如果运算结果超出了类型的值范围,则调用会因失败的断言而回滚。

可以使用 unchecked { ... } 切换到 “溢出”模式,但应谨慎使用。

取模运算

% 的结果是操作数

猜你喜欢

转载自blog.csdn.net/2301_77485708/article/details/146723493
今日推荐