news 2026/9/28 16:56:25

自增自减运算符,赋值运算符,关系运算符,四种逻辑运算符

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自增自减运算符,赋值运算符,关系运算符,四种逻辑运算符

一、自增自减运算符

1. 基本用法

c

int a = 5; int b; b = a++; // 先赋值后自增:b=5, a=6 b = ++a; // 先自增后赋值:a先变成7, b=7

2. 指针与自增自减

c

int arr[] = {1, 2, 3}; int *p = arr; printf("%d\n", *p++); // 输出1,p指向arr[1] printf("%d\n", (*p)++); // 输出2,arr[1]变成3 printf("%d\n", *++p); // p先指向arr[2],输出3

3. 注意事项

  • 副作用:自增自减会改变操作数的值

  • 优先级:后缀++/--> 前缀++/--> 解引用*

  • 求值顺序:避免在同一个表达式中对同一变量多次自增自减


二、赋值运算符

1. 基本赋值

c

int a = 10; // 简单赋值 a += 5; // 等价于 a = a + 5 a *= 2; // 等价于 a = a * 2

2. 复合赋值运算符

运算符等价形式说明
+=a = a + b加赋值
-=a = a - b减赋值
*=a = a * b乘赋值
/=a = a / b除赋值
%=a = a % b模赋值

3. 多重赋值

c

int a, b, c; a = b = c = 10; // 从右向左赋值

三、关系运算符

1. 六种关系运算符

c

> // 大于 < // 小于 >= // 大于等于 <= // 小于等于 == // 等于 != // 不等于

2. 运算结果

  • 结果为1(真)或0(假)

c

int result = (5 > 3); // result = 1 result = (5 == 3); // result = 0

3. 注意事项

  • 不要与赋值混淆:=是赋值,==是比较

  • 浮点数比较:避免直接用==比较浮点数,应使用误差范围

c

double x = 0.1 + 0.2; if (fabs(x - 0.3) < 1e-6) // 正确比较

四、逻辑运算符

1. 四种逻辑运算符

运算符名称说明示例
&&逻辑与两个都为真时结果为真(a>0 && b>0)
``逻辑或至少一个为真时结果为真`(a>0b>0)`
!逻辑非取反操作!(a>0)
按位逻辑位运算按位操作`&,, ^, ~`

2. 逻辑与&&和逻辑或||

c

int a = 5, b = 0; if (a > 0 && b > 0) // b>0为假,整体为假(短路特性) if (a > 0 || b > 0) // a>0为真,整体为真(短路特性)

3. 短路特性

c

int a = 0; int b = 5; if (a != 0 && b / a > 2) // a!=0为假,后面不会执行,避免除零错误 if (a == 0 || b / a > 2) // a==0为真,后面不会执行

4. 位逻辑运算符(按位操作)

c

unsigned int a = 5; // 0101 unsigned int b = 3; // 0011 a & b; // 0001 = 1 (按位与) a | b; // 0111 = 7 (按位或) a ^ b; // 0110 = 6 (按位异或) ~a; // 1010 = ... (按位取反)

5. 运算符优先级总结

从高到低:

  1. ()括号

  2. ++ --后缀

  3. ++ --前缀、!、~、+(正)、-(负)

  4. *、/、%

  5. +、-

  6. <、<=、>、>=

  7. ==、!=

  8. &(位与)

  9. ^(位异或)

  10. |(位或)

  11. &&

  12. ||

  13. =、+=、-=等赋值运算符


五、综合示例

c

#include <stdio.h> int main() { int a = 5, b = 3, c = 0; // 自增与关系运算 printf("a++ > b: %d\n", a++ > b); // 5>3为真,输出1,a变成6 // 逻辑运算 printf("a>0 && b>0: %d\n", a>0 && b>0); // 1 // 赋值与运算 c = a += 2; // a先加2变成8,再赋值给c printf("a=%d, c=%d\n", a, c); // a=8, c=8 return 0; }

六、常见易错点

  1. 混淆=和==

    c

    if (a = 5) // 总是真,因为赋值表达式值为5 if (a == 5) // 正确比较
  2. 自增自减的顺序问题

    c

    int a = 5; int b = a++ + ++a; // 结果依赖编译器,避免这样写
  3. 短路特性的利用

    • 用于条件判断中的函数调用保护

    c

    if (p != NULL && p->data > 0) // 避免空指针访问
  4. 位运算与逻辑运算的区别

    c

    int a = 1, b = 2; a & b; // 位运算:0 a && b; // 逻辑运算:1(非零为真)

总结:掌握这些运算符的优先级、结合性和特殊行为,是编写正确、高效C程序的基础。特别要注意自增自减的副作用和逻辑运算符的短路特性。

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

企业组织架构优化方案 在线绘图工具

在企业组织架构优化过程中&#xff0c;有效的在线绘图工具能够帮助企业快速、直观地绘制和调整组织架构图。本文将介绍几款国内外知名的在线绘图工具&#xff0c;帮助企业选择最适合的工具。以下是详细内容&#xff1a; 良功绘图网站 (https://www.lghuitu.com ) 是一款功能强…

作者头像 李华
网站建设 2026/9/27 11:33:01

计算机毕设Java攀枝花市学信教育管理平台 基于Java的攀枝花市学信教育信息管理系统设计与实现 Java技术在攀枝花市学信教育管理平台中的应用研究

计算机毕设Java攀枝花市学信教育管理平台v7rkj9&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 随着互联网技术的飞速发展&#xff0c;教育信息化已成为推动教育现代化的重要力…

作者头像 李华
网站建设 2026/9/28 8:08:16

别再手动调试了!Open-AutoGLM自动识别控件状态的高效实现路径

第一章&#xff1a;别再手动调试了&#xff01;Open-AutoGLM控件状态精准识别的变革意义在现代GUI自动化测试中&#xff0c;控件状态的准确识别是实现高稳定性脚本的核心前提。传统方法依赖坐标定位或静态属性匹配&#xff0c;极易因界面微调而失效。Open-AutoGLM 的引入彻底改…

作者头像 李华
网站建设 2026/9/28 2:35:18

FCKEditor分享Word图片转存服务器路径配置案例

&#x1f468;&#x1f4bb; Word图片一键转存功能开发日记 &#x1f50d; 寻找解决方案的漫漫长路 作为一个即将毕业的吉林软件工程专业大三学生&#xff0c;我最近在给我的CMS新闻管理系统添加一个超实用的功能 - Word文档一键粘贴并自动上传图片&#xff01;这简直是内容编…

作者头像 李华
网站建设 2026/9/27 17:11:36

Excalidraw与Thanos监控长期存储架构图

Excalidraw 与 Thanos&#xff1a;用视觉语言解构云原生监控架构 在一次深夜的线上故障复盘会上&#xff0c;团队盯着屏幕里那张密密麻麻的监控架构图——标准矩形框、规整连线、层层嵌套的组件&#xff0c;没人能一口气讲清楚数据到底从哪来、往哪去。突然有人提议&#xff1…

作者头像 李华
网站建设 2026/9/27 17:10:40

Excalidraw手绘白板神器:AI赋能下的技术架构图一键生成

Excalidraw&#xff1a;当手绘白板遇上AI&#xff0c;技术图一键生成的实践之路 在一次远程架构评审会议中&#xff0c;团队正为如何快速呈现微服务调用链而发愁。有人提议&#xff1a;“要不我们画个图&#xff1f;”——话音刚落&#xff0c;另一人苦笑&#xff1a;“又要开V…

作者头像 李华