这一讲是C 语言最核心、最容易丢分的一章从二进制、原反补码、移位 / 位操作到优先级、整型提升、表达式求值一篇彻底吃透 目录操作符分类总览二进制与进制转换原码、反码、补码必背移位操作符、位操作符、|、^、~单目操作符逗号表达式下标访问、函数调用、结构体成员访问操作符优先级 结合性表达式求值整型提升、算术转换、坑点表达式1. 操作符分类总览算术 - * / %移位 位操作 | ^ ~赋值 - *等单目! -- * sizeof ~关系 !逻辑 ||条件? :逗号,下标[]函数调用()结构体访问. -2. 二进制与进制转换二进制满 2 进 1只含 0/1八进制3 位二进制一组十六进制4 位二进制一组二进制 → 十进制按权展开求和十进制 → 二进制除 2 取余倒序排列3. 原码、反码、补码超级重点整数在内存中只存补码。规则正数原码 反码 补码负数原码最高位符号位 1其余数值位反码符号位不变其余按位取反补码反码 1为什么用补码符号位与数值位统一处理加减法统一CPU 只有加法器原码↔补码运算规则相同4. 移位操作符左移 规则左边丢弃右边补 0效果等价于 ×2右移 逻辑右移左边补 0算术右移左边补符号位常见⚠️ 禁止移动负数位num -1未定义5. 位操作符面试高频操作数必须是整数按位与有 0 则 0|按位或有 1 则 1^按位异或相同为 0相异为 1~按位取反0 变 11 变 0经典面试题 1不创建临时变量交换两个数a a ^ b; b a ^ b; a a ^ b;经典面试题 2求二进制中 1 的个数最优解while(num) { count; num num (num-1); }经典面试题 3指定位 置 1 / 置 0置 1a | (1 n)置 0a ~(1 n)6. 单目操作符只有一个操作数! -- * - ~ sizeof (类型)重点sizeof是操作符不是函数~按位取反所有 bit 翻转7. 逗号表达式从左向右依次执行结果 最后一个表达式的值int c (ab, ab10, a, ba1);8. 下标、函数调用、结构体访问arr[i]↔*(arri)func()函数调用操作符结构体变量s.mem指针ps-mem9. 操作符优先级 结合性优先级谁先算结合性同优先级时左→右 还是 右→左记结论单目 算术 移位 关系 位操作 逻辑 三目 赋值 逗号不确定就加()。10. 表达式求值最难10.1 整型提升char、short 运算前先提升为 int。有符号补符号位无符号补 0char a 1, b 2; char c a b; // 先提升int再计算10.2 算术转换不同类型运算向更高类型转换long double → double → float → ulong → long → uint → int10.3 危险表达式别写i i-- - --i * (i-3) * i ifun() - fun() * fun()(i)(i)(i)这些表达式结果不确定依赖编译器。✨ 本讲最核心总结必背整数在内存中存补码移位、位操作直接操作二进制^可不用临时变量交换num (num-1)快速消去最低位 1表达式求值看优先级 结合性小整型会整型提升复杂歧义表达式不要写✨ 结尾鼓励操作符是 C 语言的内功搞懂这一章指针、位运算、底层源码你都能看懂多练几道二进制与位运算题目马上起飞对你有帮助的话欢迎点赞、收藏、关注C 语言全套精讲持续更新