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 |
示例
1 2 3 | 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 位浮点数 | 高精度 |
示例
1 2 | const pi: f64 = 3.1415926535; const small: f32 = 1.5; |
3. 布尔类型
布尔值在 Zig 中由 bool
表示,仅有 true
和 false
两个取值。
示例
1 2 | const is_valid: bool = true; const has_error: bool = false; |
4. 数组
数组的大小是固定的,定义时必须指定元素类型和长度。
示例
1 | const numbers: [5]i32 = [_]i32{1, 2, 3, 4, 5}; |
Zig 还支持 自动推导数组:
1 | const arr = [_]u8{10, 20, 30}; |
5. 指针
Zig 使用 *
来表示指针。
示例
1 2 | const a: i32 = 42; const ptr: *const i32 = &a; |
6. 切片(Slice)
切片是一种动态大小的数组,可以用于传递变长数据。
示例
1 | const slice: []const u8 = "Hello, Zig!"; |
7. 结构体
结构体(Struct)用于定义自定义数据类型。
示例
1 2 3 4 5 6 | const Person = struct { name: []const u8, age: u8, }; const john = Person{ .name = "John", .age = 25 }; |
8. 联合体
联合体(Union)允许多个不同类型的数据共享同一块内存。
示例
1 2 3 4 5 6 | const Value = union(enum) { int: i32, float: f32, }; const v = Value{ .int = 42 }; |
9. 枚举
枚举(Enum)用于定义一组命名常量。
示例
1 2 | const Color = enum { red, green, blue }; const my_color: Color = Color.red; |
10. 错误类型
Zig 提供了 error
类型进行错误处理。
示例
1 2 3 4 | fn divide(a: i32, b: i32) !i32 { if (b == 0) return error.DivisionByZero; return a / b; } |
11. 可选类型
可选类型用于表示值可能为空(null)。
示例
1 2 | const maybe_value: ?i32 = null; const number: ?i32 = 42; |
12. 类型别名
Zig 允许创建类型别名,提高代码可读性。
示例
1 2 | const MyInt = i32; const value: MyInt = 100; |
13. 参考资料
以上是 Zig 语言的主要数据类型,掌握这些数据类型可以帮助你更高效地使用 Zig 进行系统级编程!
发表回复