Zig 运算符

简介: Zig 运算符

运算符和表达式是编程语言中用于执行各种操作的基本组成部分。

在 Zig 中,运算符可以分为几类,包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符以及其他运算符。

以下是每种运算符的详细说明和示例。

算术运算符

运算符 描述
+ 加法
- 减法
* 乘法
/ 除法
% 取余(模运算)

实例

const std = @import("std");


pub fn main() void {

   const a: i32 = 5;

   const b: i32 = 3;

 

   const add: i32 = a + b;

   const subtract: i32 = a - b;

   const multiply: i32 = a * b;

   const divide: i32 = a / b;

   const remainder: i32 = a % b;

 

   std.debug.print("a + b = {}\n", .{add});

   std.debug.print("a - b = {}\n", .{subtract});

   std.debug.print("a * b = {}\n", .{multiply});

   std.debug.print("a / b = {}\n", .{divide});

   std.debug.print("a % b = {}\n", .{remainder});

}

编译输出结果为:

a + b = 8

a - b = 2

a * b = 15

a / b = 1

a % b = 2

关系运算符

运算符 描述
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于

实例

const std = @import("std");


pub fn main() void {

   const a: i32 = 5;

   const b: i32 = 3;


   const equal: bool = a == b;

   const not_equal: bool = a != b;

   const greater: bool = a > b;

   const less: bool = a < b;

   const greater_equal: bool = a >= b;

   const less_equal: bool = a <= b;


   std.debug.print("a == b: {}\n", .{equal});

   std.debug.print("a != b: {}\n", .{not_equal});

   std.debug.print("a > b: {}\n", .{greater});

   std.debug.print("a < b: {}\n", .{less});

   std.debug.print("a >= b: {}\n", .{greater_equal});

   std.debug.print("a <= b: {}\n", .{less_equal});

}

编译输出结果为:

a == b: false

a != b: true

a > b: true

a < b: false

a >= b: true

a <= b: false

逻辑运算符

运算符 描述
and 逻辑与
or 逻辑或
! 逻辑非

实例

const std = @import("std");


pub fn main() void {

   const a: bool = true;

   const b: bool = false;


   const and_result: bool = a and b;

   const or_result: bool = a or b;

   const not_result: bool = !a;


   std.debug.print("a and b: {}\n", .{and_result}); // false

   std.debug.print("a or b: {}\n", .{or_result}); // true

   std.debug.print("!a: {}\n", .{not_result}); // false

}

编译输出结果为:

a and b: false

a or b: true

!a: false

位运算符

运算符 描述
& 按位与
| 按位或
^ 按位异或
~ 按位取反
<< 左移
>> 右移

实例

const std = @import("std");


pub fn main() void {

   const a: i32 = 5;  // 0101

   const b: i32 = 3;  // 0011


   const bit_and: i32 = a & b;      // 0001

   const bit_or: i32 = a | b;       // 0111

   const bit_xor: i32 = a ^ b;      // 0110

   const bit_not: i32 = ~a;         // 11111111111111111111111111111010

   const left_shift: i32 = a << 1;  // 1010

   const right_shift: i32 = a >> 1; // 0010


   std.debug.print("a & b: {}\n", .{bit_and});

   std.debug.print("a | b: {}\n", .{bit_or});

   std.debug.print("a ^ b: {}\n", .{bit_xor});

   std.debug.print("~a: {}\n", .{bit_not});

   std.debug.print("a << 1: {}\n", .{left_shift});

   std.debug.print("a >> 1: {}\n", .{right_shift});

}

编译输出结果为:

a & b: 1

a | b: 7

a ^ b: 6

~a: -6

a << 1: 10

a >> 1: 2

赋值运算符

运算符 描述
= 赋值
+= 加法赋值
-= 减法赋值
*= 乘法赋值
/= 除法赋值
%= 取余赋值
&= 按位与赋值
|= 按位或赋值
^= 按位异或赋值
<<= 左移赋值
>>= 右移赋值

实例

const std = @import("std");


pub fn main() void {

   var a: i32 = 5;

   const b: i32 = 3;


   a += b; // 相当于 a = a + b;

   std.debug.print("a += b: {}\n", .{a});


   a -= b; // 相当于 a = a - b;

   std.debug.print("a -= b: {}\n", .{a});


   a *= b; // 相当于 a = a * b;

   std.debug.print("a *= b: {}\n", .{a});


   a = @divTrunc(a, b); // 相当于 a = a / b;

   std.debug.print("a /= b: {}\n", .{a});


   a = @mod(a, b); // 相当于 a = a % b;

   std.debug.print("a %= b: {}\n", .{a});


   a &= b; // 相当于 a = a & b;

   std.debug.print("a &= b: {}\n", .{a});


   a |= b; // 相当于 a = a | b;

   std.debug.print("a |= b: {}\n", .{a});


   a ^= b; // 相当于 a = a ^ b;

   std.debug.print("a ^= b: {}\n", .{a});


   a <<= 1; // 相当于 a = a << 1;

   std.debug.print("a <<= 1: {}\n", .{a});


   a >>= 1; // 相当于 a = a >> 1;

   std.debug.print("a >>= 1: {}\n", .{a});

}

编译输出结果为:

a += b: 8

a -= b: 5

a *= b: 15

a /= b: 5

a %= b: 2

a &= b: 2

a |= b: 3

a ^= b: 0

a <<= 1: 0

a >>= 1: 0

其他运算符

运算符 描述
++ 自增
-- 自减

实例

const std = @import("std");


pub fn main() void {

   var a: i32 = 5;


   a += 1; // Zig 中没有 ++ 运算符,可以用 += 1 替代

   std.debug.print("a += 1: {}\n", .{a});


   a -= 1; // Zig 中没有 -- 运算符,可以用 -= 1 替代

   std.debug.print("a -= 1: {}\n", .{a});

}

编译输出结果为:

a += 1: 6

a -= 1: 5

运算符优先级

以下是 Zig 运算符的优先级列表,从高到低排列:

优先级 运算符 描述
1 () 圆括号(表达式分组)
2 [] 下标访问
3 . 成员访问
4 ! 逻辑非
~ 按位取反
- 负号
* 解引用
& 取地址
@ 内建函数调用
5 * 乘法
/ 除法
% 取余
6 + 加法
- 减法
7 << 左移
>> 右移
8 < 小于
<= 小于等于
> 大于
>= 大于等于
9 == 等于
!= 不等于
10 & 按位与
11 ^ 按位异或
12 ` `
13 and、or 逻辑与、逻辑或
14 `
15 = 赋值
+= 加法赋值
-= 减法赋值
*= 乘法赋值
/= 除法赋值
%= 取余赋值
<<= 左移赋值
>>= 右移赋值
&= 按位与赋值
^= 按位异或赋值
` =`
16 else 条件表达式

以下示例展示了运算符优先级如何影响表达式的计算顺序:

实例

const std = @import("std");


pub fn main() void {

   const a: i32 = 5;

   const b: i32 = 3;

   const c: i32 = 2;


   // 乘法优先于加法

   const result1: i32 = a + b * c; // 5 + (3 * 2) = 11

   std.debug.print("a + b * c = {}\n", .{result1});


   // 使用圆括号改变优先级

   const result2: i32 = (a + b) * c; // (5 + 3) * 2 = 16

   std.debug.print("(a + b) * c = {}\n", .{result2});


   // 比较运算符优先于逻辑运算符

   const result3: bool = a > b and b > c; // (5 > 3) and (3 > 2) = true

   std.debug.print("a > b and b > c = {}\n", .{result3});


   // 逻辑非优先于逻辑与

   const result4: bool = !(a > b) and b > c; // !(5 > 3) and (3 > 2) = false

   std.debug.print("!(a > b) and b > c = {}\n", .{result4});

}


编译输出结果为:

a + b * c = 11

(a + b) * c = 16

a > b and b > c = true

!(a > b) and b > c = false

目录
相关文章
|
3月前
|
人工智能 算法 BI
聚焦AI与BI融合,引领数智化新潮流 | 【瓴羊数据荟】瓴羊数据Meet Up城市行第一站完美收官!
当BI遇见AI,洞见变得触手可及 —— 瓴羊「数据荟」数据Meet Up城市行·杭州站启幕,欢迎参与。
560 5
聚焦AI与BI融合,引领数智化新潮流 | 【瓴羊数据荟】瓴羊数据Meet Up城市行第一站完美收官!
|
4月前
|
人工智能 自然语言处理 机器人
对话阿里云 CIO 蒋林泉:AI 时代,企业如何做好智能化系统建设?
10 月 18 日, InfoQ《C 位面对面》栏目邀请到阿里云 CIO 及 aliyun.com 负责人蒋林泉(花名:雁杨),就 AI 时代企业 CIO 的角色转变、企业智能化转型路径、AI 落地实践与人才培养等主题展开了讨论。
8018 69
对话阿里云 CIO 蒋林泉:AI 时代,企业如何做好智能化系统建设?
|
3月前
|
测试技术 开发工具 git
利用Git Hooks自动化你的开发流程
Git Hooks 是 Git 的强大功能,允许在特定事件(如提交、推送、合并请求)发生时自动执行脚本。通过合理设置和使用 Git Hooks,可以自动化测试、代码风格检查等任务,提高代码质量和开发效率。本文介绍了如何设置和使用常用的 Git Hooks,包括 `pre-commit`、`pre-push` 和 `post-merge`,并提供了最佳实践建议。
|
3月前
|
设计模式 前端开发 JavaScript
自动化测试框架设计原则与最佳实践####
本文深入探讨了构建高效、可维护的自动化测试框架的核心原则与策略,旨在为软件测试工程师提供一套系统性的方法指南。通过分析常见误区,结合行业案例,阐述了如何根据项目特性定制自动化策略,优化测试流程,提升测试覆盖率与执行效率。 ####
91 6
|
3月前
|
算法 Linux 调度
深入理解Linux内核调度器:从基础到优化####
本文旨在通过剖析Linux操作系统的心脏——内核调度器,为读者揭开其高效管理CPU资源的神秘面纱。不同于传统的摘要概述,本文将直接以一段精简代码片段作为引子,展示一个简化版的任务调度逻辑,随后逐步深入,详细探讨Linux内核调度器的工作原理、关键数据结构、调度算法演变以及性能调优策略,旨在为开发者与系统管理员提供一份实用的技术指南。 ####
119 4
|
3月前
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
85 4
|
3月前
|
XML 缓存 监控
Python中使用SOAP消息:全面指南
本文介绍了如何在Python环境中创建、发送和接收SOAP请求,包括安装`zeep`库、创建SOAP客户端、发送请求、处理复杂类型、错误处理、自定义SOAP头、性能优化、日志记录等内容。SOAP因其标准化、安全性、可靠性和互操作性,在企业级应用中仍被广泛采用。通过本文,读者可以掌握使用Python与SOAP Web服务交互的基本方法。
115 3
|
3月前
|
机器学习/深度学习 人工智能 算法
人工智能在医疗诊断中的应用与挑战
本文探讨了人工智能(AI)在医疗诊断领域的应用及其面临的挑战。随着技术的不断进步,AI已经在医学影像分析、疾病预测和个性化治疗等方面展现出巨大潜力。然而,数据隐私、算法透明度以及临床整合等问题仍然是亟待解决的关键问题。本文旨在通过分析当前AI技术在医疗诊断中的具体应用案例,探讨其带来的优势和潜在风险,并提出相应的解决策略,以期为未来AI在医疗领域的深入应用提供参考。
164 3
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
探索人工智能在教育领域的应用与挑战
随着科技的不断进步,人工智能(AI)技术已经深入到社会的各个领域,其中教育领域尤为突出。本文旨在探讨人工智能在教育领域的应用现状、面临的挑战以及未来的发展趋势。通过分析AI技术如何改变传统教学模式,提高教育质量和效率,同时指出其在实际应用中可能遇到的问题和挑战,为未来教育的发展提供参考。
311 2
|
4月前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
2096 42

热门文章

最新文章