运算符(Operators)是用于执行计算、逻辑判断和位操作的符号。Zig 提供了 算术运算符、比较运算符、逻辑运算符、位运算符赋值运算符,在低级和高级编程中都十分重要。


📖 目录

  1. 算术运算符
  2. 比较运算符
  3. 逻辑运算符
  4. 位运算符
  5. 赋值运算符
  6. 类型转换运算符
  7. 运算符优先级
  8. 参考资料

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 类型(truefalse)。

运算符说明示例
==等于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 使用 andor,而不是 &&||


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& `^`
9and or逻辑运算
10= += -= *= /=赋值运算(最低优先级)

8. 参考资料