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 += b → a = a + b
-= 减后赋值 a -= b → a = a - b
*= 乘后赋值 a *= b → a = a * b
/= 除后赋值 a /= b → a = a / b
%= 取余后赋值 a %= b → a = a % b
&= 按位与后赋值 a &= b → a = a & b
|= 按位或后赋值 `a
^= 按位异或后赋值 a ^= b → a = a ^ b
<<= 左移后赋值 a <<= n → a = a << n
>>= 右移后赋值 a >>= n → a = 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
! 逻辑非(NOT) !a 取反,真变假,假变真

短路特性:

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

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

五、位运算符

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

运算符 功能 示例 说明
& 按位与 a & b 对应位都为1则结果为1,否则为0
| 按位或 `a b`
^ 按位异或 a ^ b 对应位不同则结果为1,相同则为0
~ 按位取反 ~a 0变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=3、c=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的位数)略有差异,需结合手册调整。

相关推荐
zhangrelay5 小时前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
znnnk6 小时前
数据库被AI“重写”:2026,从CPU中心走向GPU中心
数据库·人工智能·oracle
comyccccc6 小时前
STM32F103C8T6最小系统板设计全解析学习笔记
单片机·1024程序员节
微微%6 小时前
mysql的安装和使用
数据库·mysql·mysql8安装
en.en..7 小时前
STM32 GPIO ODR 与 BSRR 寄存器完整对比详解
单片机·嵌入式硬件
软件派7 小时前
MiniMax M3.1 Flash 高频业务落地实战指南
大数据·数据库·人工智能
云边云科技_云网融合8 小时前
连锁门店组网怎么做?SD-WAN 多分支组网的架构选型、部署与成本结构
服务器·数据库·php
泡海椒8 小时前
# 深度解析JQuick-SQL Join重排序与哈希连接执行机制
数据库·sql·哈希算法
acrel79 小时前
医院用电隐患治理与节能降耗及智慧能源平台应用
网络·数据库
snow@li9 小时前
PowerDesigner 全景教程:从业务建模、表结构设计、关系管理到正向/逆向、文档输出
数据库