Zig 是一种强类型系统编程语言,提供丰富的数据类型,包括整数、浮点数、布尔值、数组、指针、结构体、联合体等。本文详细介绍 Zig 的数据类型及其用法。
目录
1. 整数类型
Zig 提供 有符号整数 和 无符号整数,支持从 8 位到 64 位的不同大小。
整数类型表
类型 | 说明 | 取值范围(有符号/无符号) |
---|---|---|
i8 | 8 位有符号整数 | -128 ~ 127 |
u8 | 8 位无符号整数 | 0 ~ 255 |
i16 | 16 位有符号整数 | -32,768 ~ 32,767 |
u16 | 16 位无符号整数 | 0 ~ 65,535 |
i32 | 32 位有符号整数 | -2,147,483,648 ~ 2,147,483,647 |
u32 | 32 位无符号整数 | 0 ~ 4,294,967,295 |
i64 | 64 位有符号整数 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
u64 | 64 位无符号整数 | 0 ~ 18,446,744,073,709,551,615 |
示例
const a: i32 = -42; // 32 位有符号整数
const b: u64 = 100; // 64 位无符号整数
const c: i8 = 127; // 8 位整数
2. 浮点数类型
Zig 仅支持 IEEE 754 规范的浮点数类型:
类型 | 说明 | 精度 |
---|---|---|
f16 | 16 位浮点数 | 低精度 |
f32 | 32 位浮点数 | 单精度 |
f64 | 64 位浮点数 | 双精度 |
f128 | 128 位浮点数 | 高精度 |
示例
const pi: f64 = 3.1415926535;
const small: f32 = 1.5;
3. 布尔类型
布尔值在 Zig 中由 bool
表示,仅有 true
和 false
两个取值。
示例
const is_valid: bool = true;
const has_error: bool = false;
4. 数组
数组的大小是固定的,定义时必须指定元素类型和长度。
示例
const numbers: [5]i32 = [_]i32{1, 2, 3, 4, 5};
Zig 还支持 自动推导数组:
const arr = [_]u8{10, 20, 30};
5. 指针
Zig 使用 *
来表示指针。
示例
const a: i32 = 42;
const ptr: *const i32 = &a;
6. 切片(Slice)
切片是一种动态大小的数组,可以用于传递变长数据。
示例
const slice: []const u8 = "Hello, Zig!";
7. 结构体
结构体(Struct)用于定义自定义数据类型。
示例
const Person = struct {
name: []const u8,
age: u8,
};
const john = Person{ .name = "John", .age = 25 };
8. 联合体
联合体(Union)允许多个不同类型的数据共享同一块内存。
示例
const Value = union(enum) {
int: i32,
float: f32,
};
const v = Value{ .int = 42 };
9. 枚举
枚举(Enum)用于定义一组命名常量。
示例
const Color = enum { red, green, blue };
const my_color: Color = Color.red;
10. 错误类型
Zig 提供了 error
类型进行错误处理。
示例
fn divide(a: i32, b: i32) !i32 {
if (b == 0) return error.DivisionByZero;
return a / b;
}
11. 可选类型
可选类型用于表示值可能为空(null)。
示例
const maybe_value: ?i32 = null;
const number: ?i32 = 42;
12. 类型别名
Zig 允许创建类型别名,提高代码可读性。
示例
const MyInt = i32;
const value: MyInt = 100;
13. 参考资料
以上是 Zig 语言的主要数据类型,掌握这些数据类型可以帮助你更高效地使用 Zig 进行系统级编程! 🚀
发表回复