news 2026/6/4 6:28:45

C 语言运算符完全指南:从入门到避坑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C 语言运算符完全指南:从入门到避坑

阅读对象:C 语言初学者、在校学生、初级嵌入式/系统开发工程师
目标:不仅让你“记住”运算符,更让你“理解”代码背后的逻辑。


如果把变量比作 C 语言中的“积木”,那么运算符就是粘合这些积木的“胶水”和“工具”。没有它们,你的程序就是一堆静止的数据,没有任何逻辑和动作。

C 语言的运算符非常丰富且灵活,这也是 C 语言强大的原因之一。但灵活往往伴随着陷阱。今天,我们就来深入浅出地拆解 C 语言中那些最常用的运算符,带你避开新手常踩的坑。


一、 算术运算符:数学计算的基础

这些是最直观的运算符,和我们小学通过学的数学基本一致。

常见符号+(加),-(减),*(乘),/(除),%(取模/求余)

💡 核心概念

  • 除法 (/):在 C 语言中,整数除以整数,结果还是整数(直接截断小数部分,不四舍五入)。只有当操作数中至少有一个是浮点数时,结果才是浮点数。
  • 取模 (%):实际上就是“求余数”。它只能用于整数

💻 实战示例

#include <stdio.h> int main() { int a = 10, b = 3; float x = 10.0f; // 整数除法 int div_int = a / b; // 浮点数除法 float div_float = x / b; // 取模 int mod_res = a % b; printf("10 / 3 = %d\n", div_int); printf("10.0 / 3 = %.2f\n", div_float); printf("10 %% 3 = %d\n", mod_res); // 注意:printf中输出%需要写成%% return 0; }

🔍 结果分析

  • 10 / 3输出3:这是新手常犯的错,以为会得到3.33。因为ab都是int,C 语言会无情地丢弃小数部分。
  • 10.0 / 3输出3.33:因为x是浮点数,运算自动升级为浮点运算。
  • 10 % 3输出1:10 除以 3 商 3 余 1。%运算常用于判断奇偶数(n % 2)或限制数值范围。

二、 关系运算符:世界的真与假

用于比较两个值。

常见符号>(大于),<(小于),>=(大于等于),<=(小于等于),==(等于),!=(不等于)

💡 核心概念

C 语言(C89 标准)中没有专门的布尔类型(true/false)。

  • :非 0 的值。
  • :0。
  • 运算结果:关系运算的结果只有两种:1(真) 或0(假)。

💻 实战示例

#include <stdio.h> int main() { int score = 85; int is_pass = (score >= 60); // 比较结果存入变量 if (score == 100) { printf("满分!\n"); } else if (is_pass) { printf("及格了,结果为: %d\n", is_pass); } else { printf("不及格。\n"); } return 0; }

🔍 结果分析

  • score >= 60成立,所以is_pass的值为1
  • 新手天坑:千万不要把==(判断相等)写成=(赋值)!如果不小心写成if (score = 100),那么score会被赋值为 100(非0),导致条件永远为真。

三、 逻辑运算符:复杂条件的组合

当你需要同时满足多个条件(并且)或者满足其中一个条件(或者)时使用。

常见符号&&(逻辑与/并且),||(逻辑或/或者),!(逻辑非/取反)

💡 核心概念

  • 短路求值 (Short-circuit):这是重点!
    • A && B:如果 A 已经是假(0),电脑就不会再去计算 B 了,因为结果注定是假。
    • A || B:如果 A 已经是真(非0),电脑就不会再去计算 B 了,因为结果注定是真。

💻 实战示例

#include <stdio.h> int main() { int a = 0; int b = 10; // 逻辑与测试 if (a != 0 && (b / a > 1)) { printf("这行代码永远不会执行,也不会报错。\n"); } else { printf("安全避免了除以0错误。\n"); } // 逻辑或测试 int x = 1; if (x == 1 || (b++ > 10)) { // 因为 x==1 为真,后面的 b++ 其实根本没执行 printf("逻辑或成立。\n"); } printf("b 的值依然是: %d (未变)\n", b); return 0; }

🔍 结果分析

  • a != 0为假,所以后面的(b / a > 1)直接被跳过。这保护了程序没有发生“除以0”崩溃。
  • 同样的,b的值最后还是 10,因为b++被短路了。

四、 自增/自减运算符:加一减一的魔法

让变量自己加 1 或减 1。

常见符号++(自增),--(自减)

💡 核心概念

  • 前缀 (++i):先加 1,再使用。
  • 后缀 (i++):先使用当前值,用完这行语句后再加 1。

💻 实战示例

#include <stdio.h> int main() { int i = 5; int j = 5; int a = ++i; // 先加,i变6,赋值给a int b = j++; // 先赋值,b是5,j再变6 printf("a = %d, i = %d\n", a, i); printf("b = %d, j = %d\n", b, j); return 0; }

🔍 结果分析

  • a得到了6b却只得到了5。虽然最后ij都变成了 6,但在赋值的那一瞬间,时机决定了一切。

五、 位运算符:直接操作二进制

对于嵌入式开发和底层系统编程,位运算是必修课。

常见符号&(按位与),|(按位或),^(按位异或),~(按位取反),<<(左移),>>(右移)

💡 核心概念

  • &(清零器):遇 0 则 0。常用于把某一位清零。
  • |(设定器):遇 1 则 1。常用于把某一位设为 1。
  • <<(放大器):左移 1 位 相当于 乘以 2。

💻 实战示例

#include <stdio.h> int main() { unsigned char flag = 0x01; // 二进制: 0000 0001 // 将第3位(bit 2)置为1 // 0x04 是 0000 0100 flag = flag | 0x04; // 结果应为 0000 0101 (即 0x05) printf("置位后: 0x%02X\n", flag); // 将刚置好的位再清零 // ~0x04 是 1111 1011 flag = flag & (~0x04); // 结果回到 0000 0001 printf("清零后: 0x%02X\n", flag); return 0; }

六、 避坑指南:优先级与易错点

1. 致命的===

这几乎是每个 C 语言程序员的“成人礼”。

int x = 5; if (x = 0) { // 上面这句意思是:把0赋值给x,表达式结果为0(假)。 // 所以这里永远不会执行。 printf("Happens?"); }

建议:当你比较变量和常量时,老手习惯写成if (0 == x)。这样如果你少写一个等号if (0 = x),编译器会直接报错(因为不能给常量赋值)。

2. 谁先谁后?(优先级)

C 语言运算符优先级非常多,死记硬背容易忘。

经典反例

if (flags & MASK == 0)

你以为是判断(flags & MASK)的结果是否等于 0?错!==的优先级比&高。 实际执行的是:flags & (MASK == 0)。这完全不是你想要的代码。

💡 黄金法则不要吝啬括号!当你拿不准优先级,或者代码看起来稍微有点复杂时,加上括号。

  • if ((flags & MASK) == 0)

这样既安全,又让读你代码的人感谢你。


总结

C 语言的运算符是构建程序逻辑的基石。

  1. 算术运算要注意整数除法的截断。
  2. 关系运算要注意===的区别。
  3. 逻辑运算得懂“短路”特性。
  4. 位运算是操作硬件及其高效计算的神器。
  5. 自增自减要分清前后缀。

代码是写给人看的,顺便给机器运行。掌握这些运算符,不仅是为了写出能跑的代码,更是为了写出健壮、清晰、无歧义的代码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 11:50:58

5大告警聚合技巧:让你的监控系统不再“狼来了“

5大告警聚合技巧&#xff1a;让你的监控系统不再"狼来了" 【免费下载链接】orleans dotnet/orleans: Orleans是由微软研究团队创建的面向云应用和服务的分布式计算框架&#xff0c;特别适合构建虚拟 actor模型的服务端应用。Orleans通过管理actors生命周期和透明地处…

作者头像 李华
网站建设 2026/5/30 17:20:04

Power BI完全指南:从入门到精通的数据分析利器

Power BI完全指南&#xff1a;从入门到精通的数据分析利器 【免费下载链接】PowerBI官方中文教程PDF版下载 本仓库提供了一份名为“Power BI 官方中文教程&#xff08;PDF版&#xff09;”的资源文件下载。该教程详细介绍了微软Power BI的功能、授权方式以及应用场景&#xff0…

作者头像 李华
网站建设 2026/6/2 5:05:33

Qwen-Image-Lightning终极指南:8步极速绘图,消费级GPU轻松搞定

Qwen-Image-Lightning终极指南&#xff1a;8步极速绘图&#xff0c;消费级GPU轻松搞定 【免费下载链接】Qwen-Image-Lightning 项目地址: https://ai.gitcode.com/hf_mirrors/lightx2v/Qwen-Image-Lightning 在AI绘图技术日新月异的今天&#xff0c;Qwen-Image-Lightni…

作者头像 李华
网站建设 2026/5/31 3:03:24

5大核心优势对比:Wan2.2-I2V-A14B在不同硬件环境下的性能表现深度解析

5大核心优势对比&#xff1a;Wan2.2-I2V-A14B在不同硬件环境下的性能表现深度解析 【免费下载链接】Wan2.2-I2V-A14B Wan2.2是开源视频生成模型的重大升级&#xff0c;采用混合专家架构提升性能&#xff0c;在相同计算成本下实现更高容量。模型融入精细美学数据&#xff0c;支持…

作者头像 李华
网站建设 2026/6/2 14:42:54

推荐 10 个本周 yyds 的 GitHub 项目。

01腾讯开源的知识库这个开源项目是腾讯微信团队开源的一款基于 AI 大模型的文档深度理解与语义检索框架。现在在 GitHub 上已经有 8.4K 的 Star。它不仅仅是一个简单的 RAG 工具&#xff0c;而是一个企业级的、模块化的全流程解决方案&#xff0c;解决复杂异构文档的知识提取与…

作者头像 李华
网站建设 2026/6/4 6:04:38

PDF-Extract-Kit:电路图解析的终极利器

PDF-Extract-Kit&#xff1a;电路图解析的终极利器 【免费下载链接】PDF-Extract-Kit A Comprehensive Toolkit for High-Quality PDF Content Extraction 项目地址: https://gitcode.com/gh_mirrors/pd/PDF-Extract-Kit 还在为复杂的电路图PDF解析而头疼吗&#xff1f;…

作者头像 李华