在本课中,我们将学习对原始类型整数和布尔值的基本操作。
本课内容参考自 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 |