当前位置: 首页 > java >正文

【C语言篇】操作符详解

【C语言篇】操作符详解

  • 【C语言篇】操作符详解
    • 一、前言
    • 二、算术操作符
    • 三、赋值操作符
    • 四、逻辑操作符
          • 1. 逻辑取反(!)
          • 2. 逻辑与(&&)
          • 3. 逻辑或(||)
          • 4. 短路特性
    • 五、关系操作符
    • 六、自增自减操作符
    • 七、总结

【C语言篇】操作符详解

💬 欢迎讨论:学习过程中若有任何疑问或见解,欢迎在评论区留言交流。

👍 点赞、收藏与分享:如果这篇文章对你有帮助,别忘了点赞、收藏并分享给更多伙伴!你们的支持是我持续创作的动力!
🚀 分享给更多人:若你觉得本文有价值,欢迎转发给对C语言感兴趣的朋友,一起在编程的世界里进步!

一、前言

操作符又称运算符,只是翻译不同,含义完全一致。根据操作数的数量,操作符可分为单目操作符(需1个操作数)、双目操作符(需2个操作数)和三目操作符(需3个操作数)。

二、算术操作符

C语言为方便数值运算提供了算术操作符,包括+-*/%,均为双目操作符。

  • +-*的运算规则与数学中的加法、减法、乘法完全一致。

  • /(除法):

    • 若操作数均为整数,结果为整数(仅保留商的整数部分,丢弃小数)。
    #include <stdio.h>
    int main() {float x = 6 / 4;  // 6和4都是整数,结果为1int y = 6 / 4;    // 结果为1printf("%f\n", x);  // 输出1.000000printf("%d\n", y);  // 输出1return 0;
    }
    

    在这里插入图片描述

    • 除法的取整规则:
      • 两数同号(均为正或均为负)时,结果向下取整(如3/2=1(-3)/(-2)=1)。
      • 两数异号(一正一负)时,结果向上取整(如-3/2=-1)。
  • %(取模/求余):

    • 仅用于整数运算,返回两数相除的余数。
    • 结果的正负号与第一个操作数的正负号一致。
    #include <stdio.h>
    int main() {printf("%d\n", 11 % -5);  // 1(与11同号)printf("%d\n", -11 % -5); // -1(与-11同号)printf("%d\n", -11 % 5);  // -1(与-11同号)return 0;
    }
    

在这里插入图片描述

三、赋值操作符

变量创建时赋予初始值称为初始化,创建后重新赋值称为赋值

int a = 100;  // 初始化
a = 200;      // 赋值
  1. 基本赋值=是最常用的赋值操作符,可连续赋值(从右向左依次执行)。

    int a = 3, b = 5, c = 0;
    c = b = a + 3;  // 等价于b = a+3(b=6),再c = b(c=6)
    

    虽然C语言支持连续赋值,但代码可读性较差,建议拆分为单独语句。

  2. 复合赋值符:为简化对变量的自增、自减等操作,C语言提供了复合赋值符:

    +=  -=  *=  /=  %=
    >>= <<= &= |= ^=  // 后5种将在后续讲解
    

    例如:

    int a = 10;
    a += 3;  // 等价于a = a + 3(a=13)
    a -= 2;  // 等价于a = a - 2(a=11)
    

四、逻辑操作符

逻辑操作符用于构建逻辑判断表达式,包括:

  • !:逻辑取反(单目操作符,改变表达式的真假)。
  • &&:逻辑与(双目操作符,两侧表达式均为真时结果为真,否则为假)。
  • ||:逻辑或(双目操作符,两侧表达式至少一个为真时结果为真,否则为假)。

在C语言中,0表示假,非零值表示真。

1. 逻辑取反(!)

!会将真(非零)变为假(0),将假(0)变为真(1)。

#include <stdio.h>
int main() {int flag = 0;  // flag为假if (!flag) {   // !flag为真,执行分支printf("do something\n");}return 0;
}

在这里插入图片描述

2. 逻辑与(&&)

两侧表达式均为真时,结果为真;只要有一个为假,结果为假。

#include <stdio.h>
int main() {int month = 4;// 月份在3-5之间时,为春季if (month >= 3 && month <= 5) {printf("春季\n");  // 输出春季}return 0;
}

在这里插入图片描述

3. 逻辑或(||)

两侧表达式至少一个为真时,结果为真;均为假时,结果为假。

#include <stdio.h>
int main() {int month = 1;// 12月、1月、2月为冬季if (month == 12 || month == 1 || month == 2) {printf("冬季\n");  // 输出冬季}return 0;
}

在这里插入图片描述

4. 短路特性

逻辑操作符具有短路求值特性:仅根据左侧表达式结果就能确定整个表达式的结果时,不再计算右侧表达式。

  • &&:左侧为假时,右侧不再计算。
  • ||:左侧为真时,右侧不再计算。

例如:

int a = 1, b = 2;
if (a > 5 && ++b) {  // a>5为假,&&短路,++b不执行// 不执行
}
printf("%d\n", b);  // 输出2(b未改变)

在这里插入图片描述

五、关系操作符

关系操作符用于比较表达式的大小,返回0(假)或1(真),主要包括:

  • >:大于
  • <:小于
  • >=:大于等于
  • <=:小于等于
  • ==:等于
  • !=:不等于

关系表达式常用于ifwhile等条件判断结构中。

#include <stdio.h>
int main() {int x = 5;if (x == 5) {  // x等于5时执行printf("x is 5.\n");}return 0;
}

在这里插入图片描述

注意事项:

  1. 避免混淆==(等于)和=(赋值):

    • 若误将if (x == 5)写成if (x = 5),会给x赋值5,且表达式结果为5(真),导致逻辑错误。
    • 建议写成if (5 == x),若误写为5 = x,编译器会报错(常量不能被赋值)。
  2. 不建议连续使用关系操作符:

    • i < j < k并非判断j在i和k之间,而是先计算i < j(结果为0或1),再与k比较。
    • 正确写法:i < j && j < k

六、自增自减操作符

++(自增)和--(自减)均为单目操作符,分为前置和后置两种形式。

  • 前置++:先将变量值加1,再使用变量(++a)。
  • 后置++:先使用变量,再将变量值加1(a++)。
  • --的规则与++类似,只是将加1改为减1。

示例:

#include <stdio.h>
int main() {// 前置++int a = 10;int b = ++a;  // a先+1(a=11),再赋值给b(b=11)printf("a=%d b=%d\n", a, b);  // 输出a=11 b=11// 后置++int c = 10;int d = c++;  // 先将c的值(10)赋给d,再c+1(c=11)printf("c=%d d=%d\n", c, d);  // 输出c=11 d=10return 0;
}

在这里插入图片描述

七、总结

本文详细讲解了C语言中算术、赋值、逻辑、关系、自增自减等操作符的用法,涵盖了整数除法的取整规则、逻辑运算的短路特性、关系操作符的使用误区等关键细节。这些基础操作符是构建复杂程序逻辑的基石,理解其原理有助于写出更高效、更可靠的代码。

你好,我是意疏。我们一起进步。

在这里插入图片描述


意气风发,漫卷疏狂
学习是成长的阶梯,每一次的积累都将成为未来的助力。我希望通过持续的学习,不断汲取新知识,来改变自己的命运,并将成长的过程记录在我的博客中
如果我的博客能给您带来启发,如果您喜欢我的博客内容,请不吝点赞、评论和收藏,也欢迎您关注我的博客。
您的支持是我前行的动力。听说点赞会增加自己的运气,希望您每一天都能充满活力!

愿您每一天都快乐,也欢迎您常来我的博客。我叫意疏,希望我们一起成长,共同进步。
logo 我是意疏 下次见!

http://www.xdnf.cn/news/18122.html

相关文章:

  • 电子电气架构 --- 软件开发数字化转型
  • Python函数:装饰器
  • 三高架构杂谈
  • 软件定义汽车---创新与差异化之路
  • Jenkins全链路教程——Jenkins调用Maven构建项目
  • Kafka文件存储机制
  • 深入浅出决策树
  • (二十)深入了解 AVFoundation-编辑:使用 AVMutableVideoComposition 实现视频加水印与图层合成(下)——实战篇
  • Google 的 Opal:重新定义自动化的 AI 平台
  • Git版本控制与协作
  • 4.9 配置 开发服务器 和 请求代理
  • 汽车之家联合HarmonyOS SDK,深度构建鸿蒙生态体系
  • 使用Idea安装JDK
  • 从零开始,系统学习AI与机器学习:一份真诚的学习路线图
  • 容器化 Android 开发效率:cpolar 内网穿透服务优化远程协作流程
  • Baumer高防护相机如何通过YoloV8深度学习模型实现网球运动员和网球速度的检测分析(C#代码UI界面版)
  • WPF中BindingList<T>和List<T>
  • Conda技巧:修改Conda环境目录,节省系统盘空间
  • 学习:各种不同类型的for循环遍历,forEach/map/filter/every/some/includes/reduce的详细用法(1)
  • 【项目】分布式Json-RPC框架 - 项目介绍与前置知识准备
  • [Linux]学习笔记系列 --[mm][list_lru]
  • Redis-缓存-穿透-布隆过滤器
  • 测试Windows10IoT系统是否可以正常运行KingSCSDA3.8软件
  • Transformer架构的数学本质:从注意力机制到大模型时代的技术内核
  • 蓝凌EKP产品:JSP 性能优化和 JSTL/EL要点检查列表
  • Excel 表格数据自动填充
  • C语言私人学习笔记分享
  • Canny边缘检测
  • pyecharts可视化图表组合组件_Grid:打造专业数据仪表盘
  • python pandas库 series如何使用