进制与位运算速查

5 个速查板块 · 关联 4 款站内工具 · 数据最后核对 2026-10-05

二进制、八进制、十六进制怎么换算、前缀怎么写、负数在计算机里是怎么表示的,以及位运算到底在算什么。

计算机内部只有两种状态,所以二进制是最底层的表示。但二进制写起来太长,于是有了八进制和十六进制作为「缩写」——它们能整块对应二进制位,转换时不需要做算术。

另一个必须理解的概念是负数与补码:计算机里没有减号,减法是用加一个「补数」实现的。理解补码,才能看懂位运算里那些看起来奇怪的结果。

1常见进制对照

同一个数值在不同进制下的写法不同。十六进制之所以流行,是因为一位十六进制恰好对应四位二进制。

十进制二进制八进制十六进制
1111
711177
81000108
10101012A
15111117F
16100002010
25511111111377FF
256100000000400100
1000111110100017503E8

十六进制用 `A` 到 `F` 表示 10 到 15。记住「`FF` = 255」和「`100` (十六进制) = 256」这两个值,在分析颜色代码、内存地址、字节数据时非常有用——它们正是「一个字节」和「两个字节」的最大值。

2各语言里的进制前缀

写常量时用前缀标明进制,是避免误解的标准做法。前缀在不同语言里高度统一。

进制常见前缀示例说明
十六进制0x 或 0X0xFF = 255几乎所有编程语言一致
二进制0b 或 0B0b1010 = 10现代语言普遍支持,老语言可能不支持
八进制0o 或前导 00o17 = 15前导零写法在部分语言里已废弃,易与十进制混淆
无前缀十六进制随场景而定颜色代码 #FF0000、U+4E2D颜色、码点这类特定语境自带含义
八进制转义反斜杠加数字如字符串里的 \101用在不便输入字符的场合,易与其他转义混淆
进制后缀部分语言支持如 16#FF较少见,主要出现在特定语言与配置格式中

「以 0 开头表示八进制」是很多老语言的坑:`010` 在一些语言里等于十进制的 8 而不是 10。写版本号、编号、前导零补位时尤其容易踩到,比如把「07 号」当成数字处理。

3位、字节与存储对应

二进制的每一位称为一个 bit,八位组成一个字节。理解这层对应关系有助于读懂存储与传输的数值。

项含义对应数值范围
1 bit一个二进制位只能表示 0 或 1
1 字节(Byte)8 个 bit无符号可表示 0 到 255,有符号为 -128 到 127
1 个十六进制位对应 4 个 bit取值范围 0 到 15
2 个十六进制位对应 1 个字节如 FF 是 255
1 KB(十进制)1000 字节硬盘与网络常按此口径
1 KiB(二进制)1024 字节操作系统内存与文件系统常按此口径
位运算的单位按 bit 操作因此常出现在权限标志、状态位等场景

4负数与补码

计算机里没有「负号」这种符号,负数是用补码表示的:最高位当符号位,负数的值等于「取反加一」。

表示法规则示例(8 位)
原码最高位为符号位,其余位表示绝对值-1 写作 10000001,且会出现 +0 与 -0
反码负数在原码基础上除符号位取反-1 写作 11111110,同样有双零问题
补码(实际采用)负数等于其正数取反加一-1 写作 11111111,-128 写作 10000000
表示范围8 位有符号数-128 到 127(负数多一个)
减法变加法a - b 等价于 a + (-b)硬件只需实现加法器即可完成减法
溢出超出范围时结果回绕127 + 1 在 8 位有符号下变成 -128

「8 位有符号整数范围是 -128 到 127」这个不对称的边界就是补码的产物:因为零只有一种表示,多的那个编码被用来表示 `-128`。这也解释了为什么整数溢出时结果会突然变成很大的负数。

5常用位运算

位运算直接操作二进制位,常用于权限标志、开关状态与高性能场景。

运算符名称规则典型用途
&按位与两位都为 1 时结果为 1取某几位、判断某个标志位是否开启
|按位或任一位为 1 时结果为 1设置某个标志位
^按位异或两位不同时结果为 1切换标志位、不使用临时变量交换两个值
~按位取反每一位取反配合掩码清除指定位
<<左移整体左移,低位补零相当于乘以 2 的幂
>>右移整体右移相当于除以 2 的幂(有符号数需注意符号扩展)
组合用法权限位每个 bit 代表一项权限如 1 读、2 写、4 执行,组合值即可表达权限集

权限位是最常见的位运算应用:用 `1 << n` 表示第 n 项权限,用 `|` 组合、用 `&` 判断是否包含。这样用一个整数就能表达多种权限组合,比存多个布尔值更紧凑,也是很多系统权限设计的底层方式。

关于「进制与位运算速查」的常见问题

二进制、八进制、十六进制之间怎么换算?

三种进制与二进制之间存在整齐的分组对应关系,这是它们存在的意义。八进制的每一位对应三个二进制位(因为 2 的 3 次方等于 8),十六进制的每一位对应四个二进制位(2 的 4 次方等于 16)。所以转换时不需要做除法,直接分组对照即可:比如二进制 11111010,从右往左每四位一组得到 1111 和 1010,分别对应 F 和 A,所以十六进制是 FA;每三位一组得到 011 111 010,对应 3、7、2,所以八进制是 372。十进制与它们之间则要通过乘幂累加或除基取余来计算,用工具更省事。

计算机为什么用二进制?

根本原因是硬件实现简单可靠。电子元件最容易表达两种稳定状态(通电与断电、高电平与低电平),用二进制只需要区分这两种状态,抗干扰能力强、成本低。如果用十进制,硬件需要精确区分十种电平状态,在噪声环境下极易出错。二进制还有一个优势是逻辑运算天然对应布尔代数的真与假,使得逻辑电路的设计与化简有完整的数学工具支撑。代价是表示同样的数值需要更长的位数,所以人类读写时常用八进制或十六进制作为缩写,兼顾紧凑与易读。

为什么 8 位有符号整数范围是 -128 到 127,而不是对称的?

这是补码表示法的必然结果。在有符号整数里,最高位被用作符号位,8 位中只剩 7 位表示数值大小,理论上有 256 种编码。如果正负各占一半应该是 -127 到 127,但补码的设计里零只有一种编码(全零),多出来的那个编码就被分配给 -128,形成了 -128 到 127 这个不对称的范围。这样设计的最大好处是减法可以用加法实现:计算 a - b 时转成 a 加上 b 的补码,硬件只需要一个加法器。这个不对称还带来一个现象:-128 取相反数会溢出,因为它没有对应的正数。

Exel 的列号 A、Z、AA 是怎么和数字对应的?

Excel 的列名其实是「二十六进制」的变形,但要注意它没有零这个字符,所以不能直接用普通进制换算。规则是 A 对应 1、Z 对应 26,超过 Z 后进位变成 AA。换算时按位置加权:AA 表示 1 乘以 26 加 1 等于 27,AB 是 28,以此类推。反向换算则用不断除以 26 取余数的方式,但每次取余前要先减一,这样才能把 1 到 26 的范围映射到 A 到 Z。同样的思路也适用于把 IP 地址转成整数的场景(每段按 256 加权),理解了「按进制位置加权」这个统一原理,这类换算都能自己推导。

内容标识:本页内容由人工智能辅助生成,并经人工核对与编辑。详见 人工智能生成内容标识说明。
内容说明:本页速查数据由本站自行整理,事实性内容以对应官方规范与文档为准,未复制第三方速查表或百科的表述。数据最后核对日期:2026-10-05。若发现错误或已更新的标准,欢迎通过页脚反馈入口告知。