介绍
1.表示范围
Move支持三种无符号整数u8、u64、u128,可表示范围如下。
| 类型 | 范围 | 备注 |
|---|---|---|
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.举例
## 显性表示一let explicit_u8 = 1u8;let explicit_u64 = 2u64;let explicit_u128 = 3u128;## 显性表示二let simple_u8: u8 = 1;let simple_u64: u64 = 2;let simple_u128: u128 = 3;## 隐性表示let implicit_u8 = 1; // 编译器识别为u8类型let implicit_u64 = 2; // 编译器识别为u64类型let implicit_u128 = 3; // 编译器识别为u128类型## 移位运算let shift_u8 = 1; // 编译器识别为u8类型let _unused = 10 << shift_u8; // 编译器识别10位u8类型,所以右边的参数也必须是u8类型## 四目运算let complex_u8 = 2; // 编译器识别为u8类型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类型 |
举例:
let e: u8 = 10;let t: u64 = 100;if (a == (b as u8)) abort 11;if ((a as u64) == b) abort 11;
