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

03:运算符

> 一篇搞定C语言所有运算符:算术、关系、逻辑、位、赋值、三目、sizeof、优先级表全收录,附短路代码实验,写表达式不再懵!


一、算术运算符(整型&浮点通用)

运算符 功能 示例 备注
+ 加/单目正 a + b+a 单目很少写
- 减/单目负 a - b-a 常用 -a 取相反数
* a * b 双目
/ a / b 整数相除舍去小数
% 取模 a % b 两操作数必须整型
++ 自增 a++++a 前缀先加再用,后缀先用再加
-- 自减 a----a 同上

注意:

  • 减号也是负号,比如 -a 是取变量 a 的相反数
  • 取模运算要求左右两边操作数必须是整型数据
  • 自加和自减运算不仅可以对整型操作,也可以对浮点数、指针操作
  • 前缀自加自减运算:先进行自加自减,再参与表达式运算
  • 后缀自加自减运算:先参与表达式运算,再进行自加自减

① 整数除法陷阱

int a = 5, b = 2;
printf("%d\n", a / b);   // 输出 2,不是 2.5

② 自增实验

int a = 100;
int b = 200;
int c = ++a; // a先自加1,变成101;然后再赋值给c,因此c等于101
int d = b++; // b先赋值给d,因此d等于200;然后b自加1,变成201float f = 3.14;
f++;          // 浮点数也可以自增,f变成4.14int arr[5] = {1,2,3,4,5};
int *p = arr;
p++;          // 指针自增,指向下一个元素

二、关系运算符(结果 0 或 1)

运算符 功能 示例 数学含义
> 大于 a > b ⩾ 不成立
>= 大于等于 a >= b ⩾ 成立
< 小于 a < b < 成立
<= 小于等于 a <= b ≤ 成立
== 相等 a == b ≠ 请用 !=
!= 不相等 a != b

关系表达式值:真=1假=0

注意:

  • 关系运算符用于判断运算符两边的表达式是否满足给定的大小条件
  • 由关系运算符组成的表达式称为关系表达式,其值为布尔型(非零则真)。
  • 判断是否相等是双等号==,而不是一个等号(赋值)。

三、逻辑运算符(短路特性)

运算符 功能 示例 短路规则
! 逻辑非 !a 单目,真假翻转
&& 逻辑与 a && b 左假右不算
|| 逻辑或 a || b 左真右不算
  • 短路实验

int a = 0, b = 1;
int x = (a && ++b);   // b 不会自增,因为左边已假
printf("b = %d\n", b); // 输出 1

四、位运算符(直接操作二进制)

运算符 名称 举例 功能说明
~ 位逻辑反(单目运算符) ~a 将变量 a 中的每一位取反
& 位逻辑与(双目运算符) a & b 将变量 a 和 b 逐位进行与操作
| 位逻辑或(双目运算符) a | b 将变量 a 和 b 逐位进行或操作
^ 位逻辑异或(双目运算符) a ^ b 将变量 a 和 b 逐位进行异或操作
<< 左移 a << 4 将变量 a 中的每一位向左移动4位
>> 右移 a >> 4 将变量 a 中的每一位向右移动4位

重要说明

  • 位运算符操作的对象是数据中的每一位(int 需要操作32个二进制位,short 需要操作16个二进制位...)
  • 运算规则
    • 位逻辑反、位逻辑与(有0得0)、位逻辑或(有1得1)拥有与逻辑运算相似的规则和一样的真值表
    • 异或运算:相同为0,不同为1
    • 移位运算:移出去的不要,空出来补(左移则补0,右移则补符号位)
实验示例

示例代码

① 快速置位/清位

#include <stdio.h>
#include <stdint.h>int main(void)
{uint8_t a = 0b10101010;  // 170uint8_t b = 0b11001100;  // 204printf("a & b = 0x%02X\n", a & b);  // 0x88 (0b10001000)printf("a | b = 0x%02X\n", a | b);  // 0xEE (0b11101110)printf("a ^ b = 0x%02X\n", a ^ b);  // 0x66 (0b01100110)printf("~a    = 0x%02X\n", ~a);     // 0x55 (0b01010101)printf("a << 2 = 0x%02X\n", a << 2); // 0xA8 (0b10101000)printf("a >> 2 = 0x%02X\n", a >> 2); // 0x2A (0b00101010)return 0;
}

② 交换两变量(无临时)

a ^= b;
b ^= a;
a ^= b;

五、赋值 & 复合赋值

赋值运算符

重要规则

  • 不能对常量赋值,只能对变量赋值
  • 不能对数组赋值(因为数组名字表示的是一个数据的地址)
  • 可以连续赋值,顺序从右到左
// 正确示例
int a, b, c;
a = b = c = 10;  // 连续赋值,等价于 c=10; b=c; a=b;// 错误示例
5 = a;           // ❌ 不能对常量赋值
int arr[5];
arr = {1,2,3};   // ❌ 不能对数组名赋值

复合赋值符说明

  • 当赋值符号左右两边有相同的操作数时,采用复合赋值符不仅直观,且能提高运算效率
  • 除了以下10个复合运算符之外,生造别的复合运算符是非法的
简单形式 复合形式 等价写法
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 &= b 位运算同样适用
a = a | b a |= b ——
a = a ^ b a ^= b ——
a = a << n a <<= n ——
a = a >> n a >>= n ——

六、三目运算符(唯一三元)

  • 唯一需要三个操作数的运算符
  • 语法:表达式1 ? 表达式2 : 表达式3
  • 释义:当表达式1为真时,取表达式2,否则取表达式3
int m = (a > b) ? a : b;   // 取较大值
//等价于
int m;
if (a > b) m = a;
else m = b;

七、sizeof 与 return

sizeof 运算符

  • 含义:计算指定数据类型或者变量所占据内存的字节数(多大)
  • 语法:sizeof(类型) 、sizeof(变量名) ,计算变量的字节数时圆括号可以省略(一般会保留)
    举例
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long double));int a[5];
printf("%d\n", sizeof(a));
printf("%d\n", sizeof a );

return运算符

  • 含义:退出某个函数(如果退出的是主函数main,那么整个程序也就退出了)
  • 语法:必须出现在函数体内,可以带函数对应类型的数据
    举例
int main()
{return 0;//说明:return 用于函数返回;main 函数返回 0 表示成功。
}char func()
{return 'H';
}

八、运算符优先级 & 结合性(速查表)

优先级 运算符 结合方向 记忆口诀
1 () [] -> . 左→右 括号下标成员
2 ! ~ ++ -- + - * & sizeof 右→左 单目
3 * / % 左→右 乘除模
4 + - 左→右 加减
5 << >> 左→右 移位
6 < <= > >= 左→右 关系
7 == != 左→右 相等
8 & 左→右 按位与
9 ^ 左→右 按位异或
10 | 左→右 按位或
11 && 左→右 逻辑与
12 || 左→右 逻辑或
13 ?: 右→左 三目
14 = += -= 右→左 赋值
15 , 左→右 逗号

实操建议:不确定就加括号,比背表更靠谱!
综合示例

int x = 5, y = 4, z;
z = x + y * 2 >> 1 & 3;   // 等价于:z = ((x + (y * 2)) >> 1) & 3;
printf("%d\n", z);        // 输出 1
http://www.hskmm.com/?act=detail&tid=28663

相关文章:

  • JavaScript内存泄露原因及解决方案
  • 数据类型扩展
  • 2025 年最新金蝶云服务商推荐榜单:聚焦铂金伙伴技术实力与万级客户口碑,助力企业数字化转型精准选型上海金蝶云服务商推荐
  • OIFHA251011 比赛总结
  • P2051 [AHOI2009] 中国象棋 个人题解
  • 一种智能调度分布式路径计算解决方案
  • 使用 C++ 和 minizip 实现 ZIP 压缩解压工具
  • 一看就懂,Oracle认证体系中的OCP中级认证
  • 2025 年试验机生产厂家最新推荐榜单:聚焦优质企业,助力精准选购高低温等各类试验设备弹簧拉压/弹簧疲劳/高频弹簧疲劳/U型弹簧专用试验机厂家推荐
  • IIS/如何查看IIS上部署网站的实时连接数
  • 拼叨叨砍价系统:实体店低成本引流的营销利器
  • 2025 自动门生产厂家最新推荐榜:权威筛选优质品牌,含选购指南与实力厂家深度解析
  • 医德出诊排班挂号管理系统:医院高效运营与便民服务的智能解决方案
  • 一佳教育培训课程系统小程序:一站式教育数字化解决方案
  • Supabase:无需后端代码的 Web 开发完整解决方案
  • Halo RAG!
  • SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
  • 2025 木饰面源头厂家最新推荐榜单:21 年标杆企业领衔,背景墙/全屋 /格栅/碳晶板全品类最新推荐及选购指南
  • 2025 年北京市管道疏通公司最新推荐排行榜:覆盖多城区、高压技术赋能的优质企业优选榜单西城区/朝阳区/丰台区/石景山/海淀区管道疏通公司推荐
  • 2025 年北京市清理化粪池公司最新推荐排行榜:聚焦高压技术与全城服务的权威甄选朝阳区/丰台区/海淀区/通州区清理化粪池厂家推荐
  • 报表方案Stimulsoft 2025.4 重磅发布!新增AI报表助手、C#脚本支持、全新图表类型等多项功能!
  • Prometheus的Exporter的数据采集机制
  • 2025 年珠三角 / 中山 / 东莞 / 佛山厂房出售公司推荐:中创集团产业生态型厂房的价值与服务解析
  • CTFshow-web方向(更新中)
  • 拷贝和上传文件,涉及隐私协议
  • 2025储罐厂家,钢衬塑储罐,钢塑复合储罐,化工储罐,防腐储罐,PE储罐,盐酸储罐,硫酸储罐,聚丙烯储罐,不锈钢储罐,次氯酸钠储罐各类型最新推荐榜:品质卓越与技术创新的行业先锋!
  • 2025 年国内标志牌生产厂家最新推荐排行榜:聚焦优质企业助力客户精准选择道路/限速/公路/施工/警示/限高/三角/安全标志牌厂家推荐
  • 在Scala中,如何在泛型类中使用类型参数?
  • Maple 2025 来了!AI 赋能 + 6000 + 命令,破解数学计算、科研与教学痛点
  • 2025 护眼灯生产厂家最新推荐榜:精选五强资深与新锐品牌,深度解析品质口碑与选购指南