进制转换详解(二进制、八进制、十进制、十六进制)

  进制,简单说就是"数数的方式"。我们平时用十进制,是因为人有十根手指;计算机只能用二进制,是因为硬件上只有"通电/断电"两种状态。这篇文章把四种常用进制和它们之间的转换一次讲清楚。

1. 什么是进制

  一种进制由两部分决定:基数 和位权。

  • 基数:这一进制有多少个数码。二进制的数码是 0 和 1,十进制的数码是 0~9,十六进制是 0~9 和 A~F(A=10,B=11......F=15)。
  • 位权:从右往左,每一位的权重是"基数的 n 次方",个位是基数⁰,十位是基数¹,以此类推。

  比如十进制的 123,拆开是 1×10² + 2×10¹ + 3×10⁰。二进制 101,拆开是 1×2² + 0×2¹ + 1×2⁰ = 5。

2. 为什么计算机用二进制

  不是计算机"喜欢"二进制,是硬件实现最省事。一个开关只有开和关,一个电路只有高电平和低电平,用两个状态表示 0 和 1,又稳定又便宜。要是用十进制,就得做出能稳定区分十种电压的电路,成本和出错率都受不了。

  所以计算机内部的一切------数字、文字、图片、视频------最终都是 0 和 1 的串。你在屏幕上看到的这篇文章,存进内存后就是一大串二进制。

3. 其他进制转十进制:按权展开

  方法:把每一位的数码乘以它的位权,然后加起来。

  例:二进制 1101 → 1×2³ + 1×2² + 0×2¹ + 1×2⁰ = 8+4+0+1 = 13

  例:十六进制 2A → 2×16¹ + 10×16⁰ = 32+10 = 42

  从右往左的位权依次是基数⁰、基数¹、基数²......别算反了就行。

4. 十进制转其他进制:除基取余

  方法:一直除以目标基数,把余数从下往上排。

  例:13 转二进制

  13÷2=6 余 1

  6÷2=3 余 0

  3÷2=1 余 1

  1÷2=0 余 1

  从下往上读:1101,和上面按权展开的结果对上了。

  例:42 转十六进制

  42÷16=2 余 10(A)

  2÷16=0 余 2

  从下往上读:2A,也对上了。

5. 二进制和八进制、十六进制互转

  这一步是偷懒用的。三位二进制正好等于一位八进制(2³=8),四位二进制等于一位十六进制(2⁴=16),所以可以直接分组转换,不用经过十进制。

  例:二进制 11011011 转十六进制

  分成两组:1101 1011

  1101 = D,1011 = B

  结果:DB

  反过来也一样,把每一位十六进制拆成四位二进制就行。IP 地址、MAC 地址、Linux 文件权限里全是这种转换,学会分组法会快很多。

6. 实际应用

  • IP 地址和子网掩码:192.168.1.0/24 这种写法,/24 就是二进制里 24 个连续的 1
  • 颜色表示:#FF0000 是红色,就是十六进制写的
  • Linux 权限:chmod 755,7=111(rwx)
  • C 语言:位运算、指针、补码全是二进制在背后

7. 结尾

  进制转换第一次学确实容易懵,我的经验是先盯住"按权展开"和"除基取余"这两个方法,多做几道题就顺了。二进制和十六进制的互转用分组法,基本不用过脑子。后面学子网划分、学 C 语言位运算,这些基础都会用到。

相关推荐
曲径海盗1 天前
【Python 学习第 41 天】for 循环
python·学习笔记·编程入门
曲径海盗2 天前
【Python 学习第 38 天】for 循环
python·学习笔记·编程入门
曲径海盗2 天前
【Python 学习第 40 天】for 循环
python·学习笔记·编程入门
kiracrimson2 天前
编码简述:内存里没有文字,只有一张对照表
开发语言·c++·二进制·计算机组成原理
曲径海盗3 天前
【Python 学习第 37 天】for 循环
python·学习笔记·编程入门
曲径海盗3 天前
【Python 学习第 39 天】for 循环
python·学习笔记·编程入门
stolentime6 天前
SOS DP学习笔记
c++·笔记·学习·算法·贪心算法·动态规划·二进制
一级新生6 天前
API 到底是什么?用点餐窗口讲明白
人工智能·大模型·api·编程入门
死磕音视频9 天前
Cursor 入门:用 AI 编辑器读懂项目并完成第一次修改
ai编程·代码编辑器·cursor·编程入门