1. 左移 语法a n含义把 a 的二进制位整体向左移动 n 位右边空出的位补 0。效果对于无符号数或正数左移1位等价于乘以2在不溢出的前提下。unsigned char x 3; // 0000 0011 x x 2; // 0000 1100 → 12 3*4122. 右移 语法a n含义把 a 的二进制位整体向右移动 n 位。有两种右移方式取决于编译器/类型逻辑右移左边空出的位补 0无符号数强制使用。算术右移左边空出的位补符号位原最高位用于保持负数符号有符号数常见。unsigned int u 8; // 0000 1000 u u 1; // 0000 0100 → 4 除以2 int s -8; // 1111 1000 补码 s s 1; // 1111 1100 → -4 算术右移补符号位1注意对有符号负数执行右移结果依赖于实现不保证是除以2建议只对无符号数使用右移3. 重要注意事项移位位数不能为负数也不能 ≥ 类型的位宽如 int 为32位移动32位是未定义行为。左移可能溢出溢出后高位丢弃需自行确保结果范围。优先级低移位运算符优先级低于加减法记得加括号int a 1 2 3; // 实际是 1 5不是 (12)3 int b (1 2) 3; // 才是你想要的结果4、常见用途快速乘/除2的幂仅无符号/正数x n → x * 2ⁿx n → x / 2ⁿ。位标志操作如 flag | (1 3) 置位第3位。颜色/数据打包解包。总结操作方向补位等价无溢出x n左补0x * 2ⁿx n无符号右补0x / 2ⁿx n有符号右补符号位实现定义不保证一句话左移随便用注意溢出右移尽量用无符号数如果你觉得有帮助欢迎点赞、收藏、评论让更多人看到