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

C语言中的运算符

一、算术运算符

用于基本的数学运算,操作数通常为整数(单片机多处理整型数据)。

运算符功能示例说明
+加法a + b两数相加
-减法a - b两数相减
*乘法a * b两数相乘(注意溢出风险)
/除法a / b整数除法,结果取整数部分
%取余(模运算)a % b求a除以b的余数,b不能为0
++自增a++++a等价于a = a + 1,前者先使用后加1,后者先加1后使用
自减a----a等价于a = a - 1,用法同自增

注意:单片机多为8位/16位处理器,运算时需注意数据范围,避免溢出(如8位无符号数最大为255,超出则溢出)。

二、赋值运算符

用于给变量赋值,可结合其他运算符简化代码。

运算符功能等价写法
=基本赋值a = b
+=加后赋值a += ba = a + b
-=减后赋值a -= ba = a - b
*=乘后赋值a *= ba = a * b
/=除后赋值a /= ba = a / b
%=取余后赋值a %= ba = a % b
&=按位与后赋值a &= ba = a & b
|=按位或后赋值a |= ba = a | b
^=按位异或后赋值a ^= ba = a ^ b
<<=左移后赋值a <<= na = a << n
>>=右移后赋值a >>= na = a >> n

示例a += 5 等价于 a = a + 5,在单片机编程中可简化代码,提高效率。

三、关系运算符

用于比较两个值的关系,返回结果为0(假)非0(真,通常为1)

运算符功能示例
==等于a == b
!=不等于a != b
>大于a > b
<小于a < b
>=大于等于a >= b
<=小于等于a <= b

注意:不要混淆赋值运算符=和关系运算符==,前者用于赋值,后者用于比较。

四、逻辑运算符

用于逻辑判断,操作数为“真”(非0)或“假”(0),结果为0或1。

运算符功能示例说明
&&逻辑与(AND)a && b两者都为真时结果为真,否则为假
||逻辑或(OR)a || b至少一个为真时结果为真,否则为假
!逻辑非(NOT)!a取反,真变假,假变真

短路特性

  • &&:若左侧为假,则右侧不再执行(结果已确定为假)。
  • ||:若左侧为真,则右侧不再执行(结果已确定为真)。

示例if (a > 0 && b < 10) 中,若a <= 0,则不会判断b < 10

五、位运算符

单片机中高频使用,直接操作二进制位(寄存器控制、IO口操作等核心场景)。

运算符功能示例说明
&按位与a & b对应位都为1则结果为1,否则为0
|按位或a | b对应位至少一个为1则结果为1
^按位异或a ^ b对应位不同则结果为1,相同则为0
~按位取反~a0变1,1变0(单目运算符)
<<左移a << n二进制位左移n位,右侧补0
>>右移a >> n二进制位右移n位,左侧补符号位(有符号数)或0(无符号数)

应用场景

  • 置位:P1 |= 0x01(将P1口的第0位置为1,其他位不变)。
  • 清零:P1 &= ~0x01(将P1口的第0位清为0,其他位不变)。
  • 取位:bit = (P1 & 0x01) >> 0(读取P1口第0位的值)。

六、条件运算符(三目运算符)

格式:表达式1 ? 表达式2 : 表达式3
功能:若表达式1为真(非0),则结果为表达式2的值;否则为表达式3的值。
示例:max = (a > b) ? a : b(取a和b中的最大值)
优势:简化简单的条件判断,适合单片机中紧凑代码的编写。

七、逗号运算符

格式:表达式1, 表达式2, ..., 表达式n
功能:从左到右依次执行所有表达式,最终结果为最后一个表达式的值。
示例:a = (b=3, c=5, b+c) → 先执行b=3c=5,再计算b+c=8,最终a=8
用途:在一行代码中执行多个表达式(如for循环的初始化)。

八、指针运算符

单片机中用于访问内存地址(如外设寄存器地址、缓冲区等)。

运算符功能示例
*指针取值(间接访问)*p
&取地址&a

示例
uint8_t *p; // 定义一个指向8位无符号数的指针
p = &data; // 指针p指向变量data的地址
*p = 0x55; // 给指针p指向的地址赋值0x55(即给data赋值)

九、 sizeof 运算符

格式:sizeof(操作数)
功能:计算操作数的字节大小(返回无符号整数)。
示例:
sizeof(int) → 若单片机int为2字节,则返回2;
sizeof(arr) → 计算数组arr的总字节数。
用途:动态计算数据长度(如数组遍历、内存分配),提高代码可移植性。

总结

  1. 位运算符是单片机编程的核心(直接操作寄存器、IO口),需重点掌握。
  2. 算术/赋值运算符用于数据计算和变量更新,注意溢出问题。
  3. 逻辑/关系运算符用于条件判断(如if、while语句)。
  4. 指针和sizeof在内存操作、外设访问中频繁使用,是底层编程的基础。

根据具体单片机型号(如8051、STM32等),部分运算符的行为可能因数据类型长度(如int的位数)略有差异,需结合手册调整。


文章转载自:

http://jTaUi6rE.zbgjn.cn
http://cCctHRa1.zbgjn.cn
http://RiLgIqUg.zbgjn.cn
http://vCYGbTPS.zbgjn.cn
http://mdVBc71v.zbgjn.cn
http://hEngCZN7.zbgjn.cn
http://KpIRIRhx.zbgjn.cn
http://cAIxp91M.zbgjn.cn
http://QiPDhzRQ.zbgjn.cn
http://TaHPe2vL.zbgjn.cn
http://HUPvifpm.zbgjn.cn
http://uNQ3KQiX.zbgjn.cn
http://WcSrd16x.zbgjn.cn
http://tdAWsjs0.zbgjn.cn
http://LsdLKeE2.zbgjn.cn
http://h43VgUzx.zbgjn.cn
http://qTa3cVLP.zbgjn.cn
http://FH7VJcq1.zbgjn.cn
http://4a8af2ZL.zbgjn.cn
http://VHgveMiO.zbgjn.cn
http://HPV9DpSN.zbgjn.cn
http://TuXb7OVs.zbgjn.cn
http://6BQ9OWnp.zbgjn.cn
http://8rcJFQ82.zbgjn.cn
http://dVjeBlE6.zbgjn.cn
http://Cb8KLIKq.zbgjn.cn
http://79OOdOUW.zbgjn.cn
http://dQQbYL2V.zbgjn.cn
http://4LqLX4Wx.zbgjn.cn
http://qxI8DWDw.zbgjn.cn
http://www.dtcms.com/a/364239.html

相关文章:

  • vue3 使用css变量
  • CSS Sass Less 样式.xxx讲解
  • 代码随想录算法训练营第四天|链表part02
  • Windows 10/11 系统 vcruntime140.dll 故障终极解决:从重装组件到系统修复的完整流程
  • 飞算JavaAI真能帮小白搞定在线图书借阅系统?开发效果大揭秘!
  • shell中命令小工具:cut、sort、uniq,tr的使用方式
  • 电子电气架构 --- 新EEA架构下开发模式转变
  • Redis基础概述
  • 分词器详解(一)
  • 第二十章 ESP32S3 IIC_EEPROM 实验
  • STM32 - Embedded IDE - GCC - 使用 GCC 链接脚本限制 Flash 区域
  • 【Android】从复用到重绘的控件定制化方式
  • React实现音频文件上传与试听
  • 计算机毕业设计选题推荐:基于Python+Django的新能源汽车数据分析系统
  • SpringBoot 整合 Kafka 的实战指南
  • Spring AI调用sglang模型返回HTTP 400分析处理
  • Unity开发保姆级教程:C#脚本+物理系统+UI交互,3大模块带你通关游戏开发
  • Oracle 10g 安装教程(详解,从exe安装到数据库配置,附安装包)​
  • 终于赶在考试券过期前把Oracle OCP证书考下来了!
  • 使用 PHP Imagick 扩展实现高质量 PDF 转图片功能
  • 字节跳动把AI大模型入门知识点整理成手册了,高清PDF开放下载
  • 嵌入式解谜日志-网络编程(udp,tcp,(while循环原理))
  • 【C语言指南】回调函数:概念与实际应用的深度剖析
  • 深度学习——基于卷积神经网络实现食物图像分类之(保存最优模型)
  • leetcode-每日一题-人员站位的方案数-C语言
  • 基于飞算JavaAI的在线图书借阅平台设计与实现
  • 基于单片机雏鸡孵化恒温系统/孵化环境检测系统设计
  • GPIO的8种工作方式
  • 安装wsl报错0x800701bc
  • OCR识别在媒资管理系统的应用场景剖析与选择