运算符(Operators)是用于执行计算、逻辑判断和位操作的符号。Zig 提供了 算术运算符、比较运算符、逻辑运算符、位运算符 和 赋值运算符,在低级和高级编程中都十分重要。
📖 目录
1. 算术运算符
算术运算符用于执行数学计算,例如加减乘除等。
运算符 | 说明 | 示例 |
---|---|---|
+ | 加法 | 3 + 2 == 5 |
- | 减法 | 5 - 3 == 2 |
* | 乘法 | 4 * 2 == 8 |
/ | 除法(整数向下取整) | 7 / 2 == 3 |
% | 取模(余数) | 7 % 2 == 1 |
🔹 示例
const std = @import("std");
pub fn main() void {
const a: i32 = 10;
const b: i32 = 3;
std.debug.print("加法: {}\n", .{a + b}); // 13
std.debug.print("减法: {}\n", .{a - b}); // 7
std.debug.print("乘法: {}\n", .{a * b}); // 30
std.debug.print("除法: {}\n", .{a / b}); // 3 (向下取整)
std.debug.print("取模: {}\n", .{a % b}); // 1
}
⚠ Zig 不允许整数除以 0,编译时会报错!
2. 比较运算符
比较运算符用于比较两个值,并返回 bool
类型(true
或 false
)。
运算符 | 说明 | 示例 |
---|---|---|
== | 等于 | 3 == 3 结果为 true |
!= | 不等于 | 3 != 4 结果为 true |
< | 小于 | 2 < 5 结果为 true |
> | 大于 | 5 > 2 结果为 true |
<= | 小于等于 | 3 <= 3 结果为 true |
>= | 大于等于 | 4 >= 2 结果为 true |
🔹 示例
const x: i32 = 5;
const y: i32 = 10;
std.debug.print("x 是否小于 y: {}\n", .{x < y}); // true
std.debug.print("x 是否大于等于 y: {}\n", .{x >= y}); // false
std.debug.print("x 是否等于 y: {}\n", .{x == y}); // false
3. 逻辑运算符
逻辑运算符用于布尔值计算,通常用于 if
语句或循环条件。
运算符 | 说明 | 示例 |
---|---|---|
and | 逻辑与 | (true and false) == false |
or | 逻辑或 | (true or false) == true |
! | 逻辑非 | !true == false |
🔹 示例
const a: bool = true;
const b: bool = false;
std.debug.print("a and b: {}\n", .{a and b}); // false
std.debug.print("a or b: {}\n", .{a or b}); // true
std.debug.print("not a: {}\n", .{!a}); // false
⚠ Zig 使用 and
和 or
,而不是 &&
和 ||
!
4. 位运算符
位运算符用于直接操作二进制位。
运算符 | 说明 | 示例 |
---|---|---|
& | 按位与 | 0b1100 & 0b1010 == 0b1000 |
` | ` | 按位或 |
^ | 按位异或 | 0b1100 ^ 0b1010 == 0b0110 |
~ | 按位取反 | ~0b0001 == 0b1110 |
<< | 左移 | 1 << 2 == 4 |
>> | 右移 | 4 >> 1 == 2 |
🔹 示例
const a: u8 = 0b1100;
const b: u8 = 0b1010;
std.debug.print("按位与: {b:04b}\n", .{a & b}); // 1000
std.debug.print("按位或: {b:04b}\n", .{a | b}); // 1110
std.debug.print("按位异或: {b:04b}\n", .{a ^ b}); // 0110
std.debug.print("左移: {}\n", .{1 << 3}); // 8
std.debug.print("右移: {}\n", .{8 >> 2}); // 2
5. 赋值运算符
赋值运算符用于变量赋值。
运算符 | 说明 | 示例 |
---|---|---|
= | 赋值 | a = 10 |
+= | 加法赋值 | a += 5 等同于 a = a + 5 |
-= | 减法赋值 | a -= 5 等同于 a = a - 5 |
*= | 乘法赋值 | a *= 3 等同于 a = a * 3 |
/= | 除法赋值 | a /= 2 等同于 a = a / 2 |
%= | 取模赋值 | a %= 3 等同于 a = a % 3 |
6. 类型转换运算符
Zig 采用显式转换,不允许自动类型转换。
🔹 @intCast
const a: u16 = 300;
const b: u8 = @intCast(u8, a);
🔹 @floatToInt
const a: f32 = 4.8;
const b: i32 = @floatToInt(i32, a); // 4
7. 运算符优先级
优先级 | 运算符 | 说明 |
---|---|---|
1 | () | 括号(最高优先级) |
2 | ! ~ | 逻辑非、按位取反 |
3 | * / % | 乘、除、取模 |
4 | + - | 加、减 |
5 | << >> | 左移、右移 |
6 | < <= > >= | 比较运算 |
7 | == != | 相等、不等 |
8 | & ` | ^` |
9 | and or | 逻辑运算 |
10 | = += -= *= /= | 赋值运算(最低优先级) |
发表回复