【独家】C语言100篇:从入门到天花板 第5篇 运算符全解

张开发
2026/5/3 23:16:29 15 分钟阅读
【独家】C语言100篇:从入门到天花板 第5篇 运算符全解
【独家】C语言100篇从入门到天花板 第5篇运算符全解算术、赋值、关系、逻辑、位运算基础作者华夏之光永存前言大家好我是华夏之光永存。欢迎继续阅读CSDN独家原创《C语言100篇从入门到天花板》。前四篇我们完成了环境搭建、数据类型、变量常量、输入输出打下了C语言的基石。本篇将进入C语言逻辑运算与数据处理的核心——运算符体系。全文严格遵循华夏本源法则从本质出发深度拆解算术、赋值、关系、逻辑、位运算五大类运算符详解优先级、结合性、隐式转换、高频陷阱与实战场景。全文保持2000字以上高质量干货不水文、不跳跃、逻辑闭环。运算符是C语言的“运算规则”决定了数据如何计算、如何比较、如何赋值。不懂运算符你的代码无法完成任何逻辑运算掌握运算符你才能写出真正的计算逻辑、条件判断、算法核心。本篇学完你将具备编写复杂运算表达式、处理数据运算、判断逻辑条件的基础能力。一、C语言运算符的本源什么是运算符从本源角度看运算符是对数据操作的符号封装本质是对计算机指令的高级抽象。C语言将运算分为五大类对应五大底层指令算术运算对数值进行加减乘除等数学计算赋值运算将计算结果写入变量内存关系运算比较两个数据的大小、相等关系逻辑运算对布尔条件进行与、或、非判断位运算直接操作二进制位极致高效、贴近硬件所有运算符必须遵循两条核心规则优先级决定运算先后顺序如先乘除后加减结合性决定同优先级运算的执行方向左结合/右结合这是C语言运算的“底层铁律”必须牢牢掌握。二、算术运算符最基础的数值计算算术运算符用于对数值类型数据进行数学运算是C语言最常用的运算符。2.1 算术运算符列表运算符名称说明示例结果加法两数相加5 38-减法两数相减5 - 32*乘法两数相乘5 * 315/除法两数相除5 / 31整数除法%取模取余两数相除的余数5 % 32自增变量值1a/aa1--自减变量值-1a--/--aa-12.2 核心重点整数除法与取模运算这是初学者最容易误解的算术运算必须深度理解本质。1整数除法向零取整C语言中两个整数相除结果仍为整数直接丢弃小数部分向零取整。正数除法5 / 3 1负数除法-5 / 3 -2、5 / -3 -2本质整数除法只保留整数部分不进行四舍五入。2取模运算求余数取模运算%只能用于整数类型结果的符号与被除数一致。正正5 % 3 2负正-5 % 3 -2正负5 % -3 2应用场景判断奇偶性num % 2 0为偶数限制数值范围如num % 100限制在0-99循环中控制步长如每10次执行一次操作3自增/自减运算符前置 vs 后置这是面试高频考点核心区别在于运算时机与返回值。前置自增a先自增再使用变量示例inta10;intba;// a 先变成 11再赋值给 b// 结果a11b11后置自增a先使用变量再自增示例inta10;intba;// 先把 a10 赋值给 b再自增// 结果a11b10自减同理--a前置先减后用a--后置先用后减。避坑不要在复杂表达式中多次自增/自减同一变量如a a结果未定义易出BUG。三、赋值运算符数据写入的核心规则赋值运算符用于将右侧表达式结果写入左侧变量是C语言最基础的赋值手段。3.1 基础赋值运算符核心本质不是“等于”而是“赋值”。左侧必须是变量不能是常量或表达式如10 a非法右侧是任意合法表达式常量、变量、运算结果示例inta10;// 定义并初始化a20;// 赋值将20写入a的内存aa5;// 先计算右侧再赋值3.2 复合赋值运算符简化写法为了简化代码C语言提供复合赋值运算符等价于变量 变量 运算符 表达式。运算符等价写法示例结果a a ba 5a5-a a - ba - 3a-3*a a * ba * 2a*2/a a / ba / 2a/2%a a % ba % 3a%3优势代码更简洁、编译器优化更好是企业级开发的标准写法。四、关系运算符逻辑判断的基础关系运算符用于比较两个数据的大小、相等关系结果为布尔值C语言中用int表示0为假非0为真。4.1 关系运算符列表运算符名称说明示例结果真/假大于左值大于右值5 3真1小于左值小于右值5 3假0大于等于左值大于或等于右值5 5真1小于等于左值小于或等于右值5 3假0等于左值等于右值5 3假0!不等于左值不等于右值5 ! 3真14.2 核心重点与的区别这是初学者最致命的错误必须严格区分关系运算符用于判断相等返回布尔值赋值运算符用于给变量赋值返回赋值结果错误示例常见inta5;if(a3){// 错误赋值而非判断// 条件永远为真3是非0进入分支}正确示例if(a3){// 正确判断a是否等于3// 只有a3时进入分支}4.3 浮点数比较不能直接用浮点数float/double因存储精度问题存在舍入误差绝对不能直接用比较。正确做法判断差值是否小于极小值精度阈值floata0.10.2;floatb0.3;if(fabs(a-b)1e-6){// 差值小于10^-6认为相等printf(相等\n);}五、逻辑运算符布尔条件的组合判断逻辑运算符用于组合多个关系条件实现复杂逻辑判断结果为布尔值0/1。C语言提供三种逻辑运算符与、或、非。5.1 逻辑运算符列表运算符名称说明优先级结合性逻辑与两边都为真结果为真中左结合逻辑或两边有一个为真结果为真!逻辑非取反真变假假变真高右结合5.2 逻辑与全真才真规则条件1 条件2两个条件都为真非0结果为真1短路特性如果条件1为假直接返回假不执行条件2示例intage20;intscore90;// 年龄大于18 且 分数大于80if(age18score80){printf(符合条件\n);}短路应用避免数组越界intarr[5]{1,2,3,4,5};inti5;// 先判断i是否越界再访问数组if(i5arr[i]0){// 安全}5.3 逻辑或||一真即真规则条件1 || 条件2两个条件有一个为真结果为真短路特性如果条件1为真直接返回真不执行条件2示例intage16;intis_vip1;// 年龄大于18 或 是VIPif(age18||is_vip){printf(允许进入\n);}5.4 逻辑非!取反规则!条件真变假假变真优先级最高结合性为右结合示例intflag0;if(!flag){// flag为0取反为真printf(flag为假\n);}5.5 逻辑运算本质整数运算C语言中没有原生布尔类型逻辑运算的本质是整数运算真非0整数1、-1、100等都视为真假0整数示例printf(%d,53);// 输出 1真printf(%d,05);// 输出 0假printf(%d,!5);// 输出 0假六、位运算符直接操作二进制位基础篇位运算符是C语言最贴近硬件的运算符用于直接操作数据的二进制位效率极高常用于底层开发、嵌入式、高性能编程、加密算法等场景。本篇只讲基础位运算符后续底层篇会深度讲解。6.1 位运算符列表运算符名称说明示例以8位为例结果按位与两位都为1结果为10b1010 0b11000b1000 (8)按位或两位有一个为1结果为10b1010^按位异或两位不同为1相同为00b1010 ^ 0b11000b0110 (6)~按位取反每一位取反0变11变0~0b10100b…0101补码表示左移左移n位右边补00b1010 10b10100 (20)右移右移n位正数左边补0负数补10b1010 10b0101 (5)6.2 核心应用场景基础按位与判断奇偶、清零指定位判断奇偶num 1结果为0则偶1则奇清零指定位num 0x0F保留低4位高4位清零按位或|设置指定位为1设置低4位为1num | 0x0F按位异或^交换变量、加密交换两个变量无需临时变量inta5,b10;aa^b;ba^b;aa^b;// 结果a10b5左移/右移高效乘除2的幂左移1位num 1等价于num * 2右移1位num 1等价于num / 2正数注意位运算符优先级低于算术、关系、逻辑运算符使用时建议加括号避免优先级错误。七、运算符优先级与结合性面试必考运算符优先级决定运算顺序结合性决定同优先级运算方向。7.1 优先级从高到低排序核心括号()最高自增/自减、按位取反、逻辑非!、正负号算术运算符先乘除后加减移位运算符/关系运算符///相等性运算符/!按位与按位异或^按位或|逻辑与逻辑或||赋值运算符/等最低7.2 结合性左结合算术、关系、逻辑、位运算从左到右算右结合自增/自减、逻辑非、赋值运算符从右到左算示例左结合inta105-3;// 先算10515再算15-312示例右结合intabc10;// 先算c10再算bc再算ab避坑复杂表达式中优先用括号强制指定运算顺序提高代码可读性避免优先级错误。八、隐式类型转换运算中的类型自动转换运算符运算时会发生隐式类型转换即编译器自动将低精度类型转换为高精度类型避免数据丢失。8.1 转换规则从小到大char→short→int→long→float→double示例charaA;// 65intintb10;floatc3.14f;// 运算a b c → 先char转int再int转float最终结果为floatfloatresabc;8.2 强制类型转换显式手动指定类型转换语法(类型) 表达式示例inta10;floatb(float)a/3;// 先把a转成float再除法得到小数结果注意强制转换可能丢失精度如float转int小数部分丢弃使用时需谨慎。九、高频错误与避坑90%初学者都会踩与混淆致命错误浮点数直接用比较精度问题整数除法丢失小数忘记转float/double自增/自减在复杂表达式中滥用结果未定义位运算符与逻辑运算符混淆vs、|vs||运算符优先级错误未加括号导致运算顺序错乱取模运算用于浮点数仅支持整数赋值运算符左侧不是变量如10 a非法把以上错误全部规避你的运算逻辑代码将稳定、清晰、无BUG。十、综合实战案例运算符全应用编写一个程序实现以下功能输入一个整数判断奇偶性输入两个整数计算和、差、积、商、取模输入一个字符判断是否为大写字母利用ASCII码与位运算交换两个整数使用两种方法临时变量、异或#includestdio.hintmain(){// 1. 判断奇偶性intnum;printf(请输入一个整数);scanf(%d,num);if(num%20){printf(%d 是偶数\n,num);}else{printf(%d 是奇数\n,num);}// 2. 计算四则运算inta,b;printf(请输入两个整数);scanf(%d %d,a,b);printf(和%d\n,ab);printf(差%d\n,a-b);printf(积%d\n,a*b);if(b!0){printf(商%.2f\n,(float)a/b);// 强制转float保留小数printf(取模%d\n,a%b);}else{printf(除数不能为0\n);}// 3. 判断大写字母charch;printf(请输入一个字符);scanf(%c,ch);// 利用ASCII码大写字母A-Z为65-90if(chAchZ){printf(%c 是大写字母\n,ch);}else{printf(%c 不是大写字母\n,ch);}// 4. 交换两个整数intx10,y20;printf(交换前x%d, y%d\n,x,y);// 方法1临时变量inttempx;xy;ytemp;printf(交换后临时变量x%d, y%d\n,x,y);// 方法2异或x10;y20;xx^y;yx^y;xx^y;printf(交换后异或x%d, y%d\n,x,y);return0;}十一、本篇本源级核心总结运算符是C语言运算规则的核心决定数据如何计算、比较、赋值算术运算符、-、*、/、%、、–重点是整数除法与自增/自减赋值运算符 与复合赋值简洁高效企业开发首选关系运算符、、、、、!核心是区分与逻辑运算符、||、!重点是短路特性提升效率、避免越界位运算符、|、^、~、、贴近硬件高效用于底层开发运算符优先级与结合性决定运算顺序复杂表达式加括号类型转换隐式转换遵循精度提升显式转换用(类型)注意精度丢失本篇是C语言逻辑运算的基石是后续流程控制if/for/while、算法编写、项目开发的绝对基础。十二、课后实战作业编写程序输入一个整数用位运算判断奇偶性num 1编写程序输入两个浮点数计算它们的和、差、积、商注意浮点数比较编写程序输入一个字符判断是否为小写字母利用ASCII码编写程序用异或运算交换三个整数编写程序输入一个整数用位运算实现左移1位、右移1位输出结果下期预告第6篇我们将进入流程控制if-else 单分支与多分支逻辑带你彻底掌握条件判断的核心规则、嵌套写法、多分支结构、else if 用法、常见陷阱为编写复杂逻辑代码打下基础。关注钩子本专栏为CSDN独家原创《C语言100篇从入门到天花板》100篇永久固定目录、逻辑闭环、绝不跑偏、绝不断更。关注华夏之光永存带你从零基础一步到位直冲C语言天花板后续底层原理、高性能编程、架构实战、内核级干货持续爆发

更多文章