在本课中,我们将学习对原始类型整数和布尔值的基本操作。
本课内容参考自 Move Book 中的整数和布尔值章节。
Move 支持整数之间的 +
、-
、*
、/
、%
运算。以下是一些限制:
- 两边必须是相同类型。
- 运算结果不能超出当前类型范围,既不能低于最小值 0(我们只有无符号整数),也不能超过最大值。
- 不能除以零。
语法 | 操作 | 中止条件 |
+ | 加法 | 结果对于整数类型来说太大 |
- | 减法 | 结果小于零 |
* | 乘法 | 结果对于整数类型来说太大 |
/ | 取整除法 | 除数为 0 |
% | 模除法 | 除数为 0 |
语法 | 操作 | 描述 |
& | 按位与 | 对每个位执行布尔与操作 |
| | 按位或 |
^ | 按位异或 | 对每个位执行布尔异或操作 |
如果要移位的位数等于或超过相应无符号整数类型(u8
、u16
、u32
、u64
、u128
或 u256
)的位宽,位移可能会导致中止。
语法 | 操作 | 中止条件 |
<< | 左移 | 要移位的位数大于整数类型的大小 |
>> | 右移 | 要移位的位数大于整数类型的大小 |
语法 | 操作 |
== | 等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
一种大小的整数类型可以转换为另一种大小。转换仅限于整数类型,必须强调的是,转换不涉及截断。如果结果超过目标类型的容量,转换操作将导致中止。
// 转换为更大类型
let a: u8 = 8;
let b: u16 = (a as u16);
let c = 100u32 + (a as u32);
语法 | 描述 | 等价表达式 |
&& | 短路逻辑与 | p && q 等价于 if (p) q else false |
! | 逻辑非 | !p 等价于 if (p) false else true |