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

C语言第8讲:操作符

这一讲是C 语言最核心、最容易丢分的一章!从二进制、原反补码、移位 / 位操作,到优先级、整型提升、表达式求值,一篇彻底吃透!


📑 目录

  1. 操作符分类总览
  2. 二进制与进制转换
  3. 原码、反码、补码(必背)
  4. 移位操作符:<<、>>
  5. 位操作符:&、|、^、~
  6. 单目操作符
  7. 逗号表达式
  8. 下标访问、函数调用、结构体成员访问
  9. 操作符优先级 + 结合性
  10. 表达式求值:整型提升、算术转换、坑点表达式

1. 操作符分类(总览)

  • 算术:+ - * / %
  • 移位:<< >>
  • 位操作:& | ^ ~
  • 赋值:= += -= *=
  • 单目:! ++ -- & * sizeof ~
  • 关系:> >= < <= == !=
  • 逻辑:&& ||
  • 条件:? :
  • 逗号:,
  • 下标:[]
  • 函数调用:()
  • 结构体访问:. ->

2. 二进制与进制转换

  • 二进制:满 2 进 1,只含 0/1
  • 八进制:3 位二进制一组
  • 十六进制:4 位二进制一组

二进制 → 十进制:按权展开求和十进制 → 二进制:除 2 取余,倒序排列


3. 原码、反码、补码(超级重点)

整数在内存中只存补码

规则

  • 正数:原码 = 反码 = 补码
  • 负数:
    • 原码:最高位符号位 1,其余数值位
    • 反码:符号位不变,其余按位取反
    • 补码:反码 + 1

为什么用补码?

  1. 符号位与数值位统一处理
  2. 加减法统一(CPU 只有加法器)
  3. 原码↔补码运算规则相同

4. 移位操作符

左移 <<

  • 规则:左边丢弃,右边补 0
  • 效果:等价于 ×2

右移 >>

  • 逻辑右移:左边补 0
  • 算术右移:左边补符号位(常见)

⚠️ 禁止移动负数位:num >> -1未定义!


5. 位操作符(面试高频)

操作数必须是整数!

  • &按位与:有 0 则 0
  • |按位或:有 1 则 1
  • ^按位异或:相同为 0,相异为 1
  • ~按位取反:0 变 1,1 变 0

经典面试题 1:不创建临时变量交换两个数

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

经典面试题 2:求二进制中 1 的个数

最优解:

while(num) { count++; num = num & (num-1); }

经典面试题 3:指定位 置 1 / 置 0

  • 置 1:a |= (1 << n)
  • 置 0:a &= ~(1 << n)

6. 单目操作符

只有一个操作数:! ++ -- & * + - ~ sizeof (类型)

重点:

  • sizeof操作符,不是函数
  • ~按位取反(所有 bit 翻转)

7. 逗号表达式

  • 从左向右依次执行
  • 结果 =最后一个表达式的值
int c = (a>b, a=b+10, a, b=a+1);

8. 下标、函数调用、结构体访问

  • arr[i]*(arr+i)
  • func()函数调用操作符
  • 结构体:
    • 变量:s.mem
    • 指针:ps->mem

9. 操作符优先级 + 结合性

  • 优先级:谁先算
  • 结合性:同优先级时,左→右 还是 右→左

记结论:

  • 单目 > 算术 > 移位 > 关系 > 位操作 > 逻辑 > 三目 > 赋值 > 逗号

不确定就加()


10. 表达式求值(最难!)

10.1 整型提升

char、short 运算前先提升为 int。

  • 有符号:补符号位
  • 无符号:补 0
char a = 1, b = 2; char c = a + b; // 先提升int再计算

10.2 算术转换

不同类型运算,向更高类型转换:long double → double → float → ulong → long → uint → int

10.3 危险表达式(别写!)

  • i = i-- - --i * (i=-3) * i++ + ++i
  • fun() - fun() * fun()
  • (++i)+(++i)+(++i)

这些表达式结果不确定,依赖编译器。


✨ 本讲最核心总结(必背)

  1. 整数在内存中存补码
  2. 移位、位操作直接操作二进制
  3. ^可不用临时变量交换
  4. num & (num-1)快速消去最低位 1
  5. 表达式求值看优先级 + 结合性
  6. 小整型会整型提升
  7. 复杂歧义表达式不要写!

✨ 结尾鼓励

操作符是 C 语言的内功,搞懂这一章,指针、位运算、底层源码你都能看懂!多练几道二进制与位运算题目,马上起飞~

对你有帮助的话,欢迎点赞、收藏、关注,C 语言全套精讲持续更新!

http://www.jsqmd.com/news/773443/

相关文章:

  • 从“AI向善”到“AI合规”:2026奇点大会定义AISMM-ESG耦合度公式(α=0.63β+γ²),你的企业达标了吗?
  • 机器学习实战问答库:从理论到工程的避坑指南与解决方案
  • 2026年昆明AI搜索**优化服务商深度评估与选型指南 - 2026年企业推荐榜
  • 2026年最新武汉庭院施工服务:如何甄别专业团队与避坑指南 - 2026年企业推荐榜
  • TinyMaix:轻量级机器学习库在微控制器上的应用
  • 2026年现阶段,如何甄选优质不锈钢网筐供应商?深度解析与厂家推荐 - 2026年企业推荐榜
  • QueryCanvas:基于画布的低代码数据工作流编排工具详解
  • 3种用户场景下的XHS-Downloader使用指南:从小白到专家的完整解决方案
  • C语言第6讲:函数递归
  • zimage-skill:现代化图像处理技能库的设计原理与实战应用
  • 基于多标签权重与相关性的在线流特征选择算法【附代码】
  • Open-Lyrics:基于异步并发架构的高性能语音字幕生成系统设计
  • 2026年5月探访黄岩:为何台州魁峰机械的全自动吹瓶机备受青睐? - 2026年企业推荐榜
  • AISMM模型效能跃迁路径(2024企业实测数据全披露):平均运营人效提升42.6%,TOP10%团队已全面启用
  • 如何用 watchEffect 实现根据参数自动获取数据?代码简化干货
  • 2026年当前,聚焦化妆品包装专用机制造:宁波华维机械有限公司的实力与担当 - 2026年企业推荐榜
  • 通过用量看板清晰掌握团队大模型 API 调用成本与模型分布
  • AISMM架构设计不达标,IPO直接终止?2026奇点大会技术委员会主席亲授4步合规加固法
  • 2026年5月新发布:深度解析富辰新材料在氟碳漆市场的核心优势与选型指南 - 2026年企业推荐榜
  • 基于电液负载敏感的工程底盘行驶模糊PID控制【附代码】
  • 告别电脑!这5款手机自动化脚本App,让你躺着搞定日常重复操作(附详细对比)
  • 数字控制技术在DC/DC转换器中的高效应用
  • 【软考高级架构】案例题考前突击13:SAAM / ATAM / CBAM
  • 《玩转OpenClaw内置诊断,建立属于自己的部署运维逻辑》
  • 2026年Q2山东商务用茶优选:青岛新辉盛正山小种源头直供实力解析 - 2026年企业推荐榜
  • ARM AMBA Timer模块原理与应用详解
  • 如何用CellProfiler实现生物图像自动分析:从手动处理到批量智能化的完整指南
  • 事件驱动爬虫框架claw.events:构建高解耦、可扩展的数据采集系统
  • Zotero Style:如何用可视化进度条和智能标签管理提升文献阅读效率
  • AISMM如何重构金融云成本治理?2026奇点大会首曝FinOps 3.0量化模型与ROI验证数据