本文目录
什么是二进制运算?
二进制运算是在二进制(base-2)下进行的数学运算,只使用数字 0 和 1。每一台数字计算机在硬件层面都以二进制处理数据——整数、浮点数、内存地址乃至文本,最终都以位(bit)序列的形式存储和操作。理解二进制对于底层编程、网络和数字逻辑至关重要。
除了简单的加法和减法,二进制运算还包括位运算:AND、OR、XOR、NOT 以及移位。这些运算作用于单个位,是设置权限标志、计算校验和、对 IP 地址进行掩码运算以及优化性能关键代码等任务的基础。
位运算的工作原理
位运算符逐位处理整数。每种运算都有一张真值表,定义了每一种输入位组合所对应的输出。
- AND、OR、XOR——AND(&)仅当两个位都为 1 时才返回 1,OR(|)当任一位为 1 时返回 1,XOR(^)当两个位不同时返回 1。它们用于掩码运算、组合标志和翻转位
- NOT 与移位——NOT(~)翻转所有位,左移(<<)相当于乘以 2 的幂,右移(>>)相当于除以 2 的幂。算术右移会为负数保留符号位
- 二进制补码——现代计算机使用二进制补码表示负整数,其中 -1 的所有位都是 1。这使得同一套硬件无需额外电路即可完成加法和减法
免费试用 —— 无需注册
计算二进制运算 →何时使用位运算
位运算广泛应用于系统编程、网络以及对性能敏感的应用中。
- 权限标志——Unix 文件权限(rwxr-xr-x = 0755)使用位域,每一位代表一项特定权限,通过 AND 检查、通过 OR 设置
- 子网掩码——网络工程师在 IP 地址与子网掩码之间执行 AND 运算,以确定网络边界并正确路由流量
- 图形与颜色处理——以 0xRRGGBB 整数存储的像素颜色,使用移位和掩码来提取或修改单独的红、绿、蓝通道
常见问题
有符号整数和无符号整数有什么区别?
无符号整数将所有位都用于表示数值大小,因此一个 8 位无符号整数的取值范围是 0 到 255。有符号整数保留最高位表示符号(正或负),因此一个 8 位有符号整数使用二进制补码时的取值范围是 -128 到 127。这一选择会影响右移和比较运算的行为。
位移和乘以或除以 2 是一回事吗?
对于非负整数,左移 n 位等价于乘以 2^n。右移相当于除以 2^n,但对负数而言,其行为取决于它是算术移位(保留符号)还是逻辑移位(补零)。在大多数语言中,>> 对有符号类型是算术移位,而 >>>(若可用)是逻辑移位。
位运算在现代代码中为何依然重要?
位运算被广泛用于功能标志、权限系统、网络协议、密码学、哈希函数、图形渲染和数据压缩。它们只需一个 CPU 周期即可执行,且不占用额外内存,因此非常适合性能关键的代码路径。现代框架内部也会使用位掩码——React 用它来表示 effect 标志,Linux 用它来表示文件权限。