介绍

1.表示范围

Move支持三种无符号整数u8u64u128,可表示范围如下。

类型 范围 备注
u8 [0,2^8-1] 无符号整型8位
u64 [0,2^64-1] 无符号整型64位
u128 [0,2^128-1] 无符号整型128位

2.字面量

如果要表示数字十进制120,或者十六进制0xFF,通常在后面添加类型后缀,如120u8。如果没有指定类型 Move 编译器会尝试根据上下文去识别类型,如果无法识别,则为u64类型。

3.举例

  1. ## 显性表示一
  2. let explicit_u8 = 1u8;
  3. let explicit_u64 = 2u64;
  4. let explicit_u128 = 3u128;
  5. ## 显性表示二
  6. let simple_u8: u8 = 1;
  7. let simple_u64: u64 = 2;
  8. let simple_u128: u128 = 3;
  9. ## 隐性表示
  10. let implicit_u8 = 1; // 编译器识别为u8类型
  11. let implicit_u64 = 2; // 编译器识别为u64类型
  12. let implicit_u128 = 3; // 编译器识别为u128类型
  13. ## 移位运算
  14. let shift_u8 = 1; // 编译器识别为u8类型
  15. let _unused = 10 << shift_u8; // 编译器识别10位u8类型,所以右边的参数也必须是u8类型
  16. ## 四目运算
  17. let complex_u8 = 2; // 编译器识别为u8类型
  18. let _unused = x + complex_u8; // 运算符两边参数类型必须一致

运算

1.四目运算

运算符两边的参数必须类型一致,如果要对多个类型的值做运算,必须先cast
如果没有做cast操作,异常时会出现以下提示。

语法 操作 Abort If
+ 加法 Result is too large for the integer type
- 减法 Result is less than zero
* 乘法 Result is too large for the integer type
% 取余 The divisor is 0
/ 取整 The divisor is 0

2.位运算

语法 操作 Desc
& 按位与 对每一位进行与运算
``` 按位或 对每一位进行或运算
^ 按位异或 对每一位进行异或运算

3.位移

又侧指定要位移几位的类型必须和符号左边的数据类型一致。

语法 操作 Desc
<< 左移 左移n位
>> 右移 右移n位

4.比较运算符

只有整数类型才能使用比较运算符。大于>、大于等于>=、小于<、小于等于<=。两边参数类型必须一致,如果不一致需要cast

5.相等运算符

相等==、不等!=。两边参数类型必须一致,如果不一致需要cast

6.强制转换关键字cast

只有整数类型才能使用cast

语法 操作 Abort If
E as T 将E强制转换为T E数值太大,无法转换为T类型

举例:

  1. let e: u8 = 10;
  2. let t: u64 = 100;
  3. if (a == (b as u8)) abort 11;
  4. if ((a as u64) == b) abort 11;