整数(Int)
int 不是唯一的整数类型,它只是整数字面量的默认类型。MushScript 的整数按位宽分为以下几档:
| 家族 | 类型 | 字面量后缀 |
|---|---|---|
| 有符号 | int8 int16 int32 int64 | i8 i16 i32 i64 |
| 无符号 | uint8 uint16 uint32 uint64 | u8 u16 u32 u64 |
int 是 int32 的简写,uint 是 uint32 的简写。后缀直接跟在字面量后面,大小写不敏感:
val a = 42;
val big = 5_000_000i64;
val hexv = 0xFF_u8;
val bits = 0b1010;
print(a, big, hexv, bits);42 5000000 255 10字面量规则
| 写法 | 含义 |
|---|---|
42 | 十进制 |
0xFF / 0XFF | 十六进制(前缀大小写不敏感) |
0b1010 / 0B1010 | 二进制 |
0o777 / 0O777 | 八进制 |
5_000_000 | 下划线分隔(任意进制均可插) |
- 进制整数同样可以带后缀(
0xFF_u8合法); L/U/UL这类单字母后缀不存在,写了落通用语法错;非法整数后缀报 MS3137;- 无后缀的裸整数,类型判定倾向 32 位
int。
字面量适配目标类型
写出类型注解时,字面量会自动适配目标类型,只要装得下:
val tiny: int8 = 127;
val wide: int64 = 9_000_000_000;
val un: uint8 = 200;
print(tiny, wide, un);127 9000000000 2009_000_000_000 远超 32 位,但目标 int64 能表示该值,编译器允许;超出值域则编译器当场拒绝。负号随字面量一起检查,超出值域同样拒绝:
val tooBig: int8 = 200; // ✗ 200 超出 int8 的值域
val tooLow: int8 = -200; // ✗ -200 超出 int8 的值域目标类型注解较长时,也可以把后缀直接写在数字上(一元负号一并参与检查):
val deep = -100i8;
print(deep);-100Note
家族里还有一个 byte,8 位无符号,和 uint8 同宽。见到它按 uint8 理解即可。
常用函数与格式化
整数没有的方法面大多在 Math 模块上(裸名可用,标准库默认注入):
val n = 42;
print(n.ToString("X"));
print(Math.Abs(-7), Math.Max(2, 9), Math.Min(2, 9), Math.Sign(-3), Math.Clamp(5, 0, 3));2A
7 9 2 -1 3ToString()无参转文本;带格式动词(F/N/X/P)的规则与插值{n:X}同表,见字符串插值;Math.Abs/Max/Min/Sign/Clamp是五个常用算术函数;显式检查溢出用Math.CheckedAdd族(默认是定宽回绕,unchecked);- 这些函数都在编译期常量域的白名单里,可以直接出现在 const 位。
注意
最后更新于 2026年10月7日
