Integer Rules 整数规则
Zig支持十六进制、八进制和二进制的整数字 .
const decimal_int: i32 = 98222;
const hex_int: u8 = 0xff;
const another_hex_int: u8 = 0xFF;
const octal_int: u16 = 0o755;
const binary_int: u8 = 0b11110000;
下划线也可以放在数字之间作为视觉分隔符 .
const one_billion: u64 = 1_000_000_000;
const binary_mask: u64 = 0b1_1111_1111;
const permissions: u64 = 0o7_5_5;
const big_address: u64 = 0xFF80_0000_0000_0000;
允许 "整数拓宽",这意味着一种类型的整数可以胁迫为另一种类型的整数,条件是新类型可以容纳旧类型的所有数值 .
test "integer widening" {
const a: u8 = 250;
const b: u16 = a;
const c: u32 = b;
try expect(c == a);
}
如果你有一个存储在整数中的值,但不能胁迫到你想要的类型,@intCast可以用来明确地从一种类型转换到另一种。如果给定的值超出了目标类型的范围,这就是可检测的非法行为 .
test "@intCast" {
const x: u64 = 200;
const y = @intCast(u8, x);
try expect(@TypeOf(y) == u8);
}
默认情况下,整数是不允许溢出的。溢出是可检测的非法行为。有时候,能够以一种明确定义的方式溢出整数是人们所希望的行为。对于这种使用情况,Zig提供了溢出操作符 .
Normal Operator | Wrapping Operator |
+ | +% |
- | -% |
* | *% |
+= | +%= |
-= | -%= |
*= | *%= |
test "well defined overflow" {
var a: u8 = 255;
a +%= 1;
try expect(a == 0);
}