常用数制
解密计算机的“数字语言”:常用数制大起底!
哈喽! 👋 有没有觉得 “数字” 就像我们生活中的 “空气” 一样,无处不在,又不可或缺? 我们用数字来记录年龄、计算价格、衡量距离… 没有数字,现代社会简直无法想象!
但是,你有没有想过,我们人类常用的 “数字系统”,跟计算机内部使用的 “数字系统”,其实是不太一样的呢? 🤔 这就像我们人类有 “汉语”、“英语”、“法语” 等等不同的语言一样,计算机也有它自己独特的 “数字语言”。
今天,就让我来当一回 “语言老师”,带你学习几种计算机世界里最常用的 “数字语言” —— 数制。 掌握了这些 “数制”,就如同掌握了 打开计算机世界大门的钥匙,让你对计算机的理解更上一层楼! 🚀
🗣️ 什么是 “数制”? (给数字 “穿上不同的衣服”)
在我们深入各种具体的 “数制” 之前,先来简单理解一下 “数制” 到底是什么意思。 你可以把 “数制” 想象成 给数字 “穿上不同的衣服”。
我们平时用的 “十进制”,就像是数字的 “日常休闲装”,简单、自然、方便我们日常使用。 但是,计算机的世界,更喜欢 “二进制” 这种 “工作制服”,简洁、高效、更适合计算机硬件的工作方式。

“数制” 的本质,就是一套 计数规则。 它规定了:
- 用哪些 “数字符号” 来表示数值? 例如,十进制用 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 这十个符号。
- 如何进行进位? 例如,十进制是 “逢十进一”,二进制是 “逢二进一”。
不同的数制,就像不同的 “方言” 一样,虽然表达的是 同一个意思 (数值),但是 “表达方式” (数字符号和进位规则) 却不一样。 就像 “我爱你”,用汉语说,用英语说 “I love you”,用法语说 “Je t’aime”,虽然语言不同,但表达的爱意却是相同的。
接下来,我们就来逐一认识几种计算机中常用的 “数制方言” 吧!
🔢 “方言” 一: 十进制 (Decimal - D) — 我们最熟悉的 “母语”
十进制 (Decimal) ,是我们 人类最常用,也是最熟悉 的数制。 之所以选择十进制,很可能是因为我们 有十根手指 ,数数的时候掰手指最方便 (这纯属猜测啦 😉)。
十进制的特点:
- 基数: 10 — 也就是说,十进制使用 10 个不同的数字符号: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 。
- 进位规则: 逢十进一 — 当某一位的数值达到 10 时,就向高位进 1。
举个例子: 我们平时数数: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 接下来就是 10 (逢十进一,个位变 0,十位变 1), 然后是 11, 12, … 19, 接下来又是 20 (逢十进一,个位变 0,十位进 1), 以此类推。
在十进制中,每一个数字的位置都代表着不同的 “权值” (位权) 。 例如,对于十进制数 123:
- 个位 (右边第一位):
3— 表示3 * 10^0 = 3 * 1 = 3 - 十位 (右边第二位):
2— 表示2 * 10^1 = 2 * 10 = 20 - 百位 (右边第三位):
1— 表示1 * 10^2 = 1 * 100 = 100
所以,123 实际上就等于 100 + 20 + 3 = 123。 这里的 10^0, 10^1, 10^2 就是十进制的 位权 (权值) , 底数 (10) 就是十进制的 基数 。
虽然十进制我们非常熟悉,但是,计算机内部却 不直接使用十进制 ,而是使用另一种更简洁、更高效的数制 —— 二进制。
💡 “方言” 二: 二进制 (Binary - B) — 计算机的 “母语” (重点!)
二进制 (Binary) ,是 计算机世界的 “通用语言” ,也是 计算机硬件最容易 “理解” 和 “实现” 的数制 。 之所以选择二进制,是因为计算机内部的电子元件 (例如晶体管), 天生就具有 “两种状态” 的特性 :
- 导通 (通电) — 可以表示 “1” (真、True、高电平)
- 截止 (断电) — 可以表示 “0” (假、False、低电平)
这就像 开关的 “开” 和 “关” 两种状态 , 或者 电灯的 “亮” 和 “灭” 两种状态 一样, 非常简单,而且 易于实现,稳定可靠。
二进制的特点:
- 基数: 2 — 也就是说,二进制只使用 2 个不同的数字符号: 0 和 1 。 所以,二进制数中, 只会出现 0 和 1 这两个数字。
- 进位规则: 逢二进一 — 当某一位的数值达到 2 时,就向高位进 1。
举个例子: 二进制数数: 0, 1, 接下来就是 10 (逢二进一,个位变 0,十位变 1), 然后是 11, 接下来又是 100 (逢二进一,个位和十位都变 0,百位进 1), 以此类推。
在二进制中,每一个数字的位置也代表着不同的 “权值” (位权) 。 例如,对于二进制数 1011:
- 第 0 位 (右边第一位):
1— 表示1 * 2^0 = 1 * 1 = 1 - 第 1 位 (右边第二位):
1— 表示1 * 2^1 = 1 * 2 = 2 - 第 2 位 (右边第三位):
0— 表示0 * 2^2 = 0 * 4 = 0 - 第 3 位 (右边第四位):
1— 表示1 * 2^3 = 1 * 8 = 8
所以,二进制数 1011 转换为十进制数,就等于 8 + 0 + 2 + 1 = 11。 这里的 2^0, 2^1, 2^2, 2^3 就是二进制的 位权 (权值), 底数 (2) 就是二进制的 基数。
二进制虽然只有 0 和 1 两个数字,看起来很 “简陋”,但它却可以表示 世界上所有的数值和信息 。例如,数字、文字、图片、音频、视频,在计算机内部,最终都会被 转换成二进制代码 来存储和处理。
二进制是计算机的 “基石”,理解二进制,是理解计算机工作原理的关键一步!
🧑🤝🧑 “方言” 三 和 “方言” 四: 八进制 (Octal - O) 和 十六进制 (Hexadecimal - H) — 二进制的 “简写形式”
八进制 (Octal) 和 十六进制 (Hexadecimal) , 这两种数制,在计算机中也经常用到。 但它们 并不是计算机 “直接使用” 的语言,而是 为了方便人类阅读和书写二进制数而 “发明” 的 “简写形式”。
原因: 我们已经知道,二进制数虽然简洁,但是 对于人类来说,读写起来却非常 “冗长” 。 例如,十进制数 255, 用二进制表示就是 11111111, 要写 8 个 1,很容易看错数错。 如果数字再大一些,二进制表示就会更长,更难读写。
为了解决这个问题,人们就发明了 八进制和十六进制。 八进制和十六进制,可以看作是 二进制的 “压缩版” ,它们可以用 更少的位数 来表示 相同的数值 ,而且 与二进制之间的转换非常方便 。
3. 八进制 (Octal - O)
八进制的特点:
- 基数: 8 — 使用 8 个数字符号: 0, 1, 2, 3, 4, 5, 6, 7。
- 进位规则: 逢八进一。
八进制与二进制的 “速记” 关系: 每 3 位二进制数,可以对应 1 位八进制数。 因为 2^3 = 8。 这使得 二进制转八进制,以及八进制转二进制 变得非常简单快捷。
4. 十六进制 (Hexadecimal - H)
十六进制的特点:
- 基数: 16 — 使用 16 个数字符号: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F。 其中,
A, B, C, D, E, F分别代表十进制的10, 11, 12, 13, 14, 15。 - 进位规则: 逢十六进一。
十六进制与二进制的 “速记” 关系: 每 4 位二进制数,可以对应 1 位十六进制数。 因为 2^4 = 16。 这使得 二进制转十六进制,以及十六进制转二进制 变得非常非常简单快捷。 十六进制是计算机领域最常用的二进制 “简写” 形式! 例如, 内存地址、颜色代码、HTML 网页代码 等等,都经常使用十六进制表示。
总结一下:
| 数制 | 基数 | 数字符号 | 进位规则 | 与二进制关系 | 主要用途 |
|---|---|---|---|---|---|
| 十进制 (D) | 10 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 | 逢十进一 | - | 人类日常使用 |
| 二进制 (B) | 2 | 0, 1 | 逢二进一 | - | 计算机内部表示和运算 |
| 八进制 (O) | 8 | 0, 1, 2, 3, 4, 5, 6, 7 | 逢八进一 | 3 位二进制对应 1 位 | 简化二进制表示 (较少用) |
| 十六进制 (H) | 16 | 0-9, A, B, C, D, E, F | 逢十六进一 | 4 位二进制对应 1 位 | 简化二进制表示 (常用),例如内存地址、颜色代码 |
🔄 数制之间的 “翻译”: 不同数制间的互相转换 (重点和难点!)
学会了各种数制,更重要的是要 掌握不同数制之间的互相转换 。 这就像学会了 “英语” 和 “汉语” 两种语言,还要学会 “英汉互译” 一样! 掌握数制转换,可以帮助我们 在不同的数字表示之间灵活切换,更好地理解计算机内部的数据表示方式。
1. 二进制转十进制: “按权展开求和”
方法: 将二进制数的 每一位 从 个位 (右边第一位) 开始 ,依次乘以 2 的 0 次方、1 次方 、2 次方 … 然后将 所有乘积相加 ,就得到了对应的十进制数。
公式:
举例: 将二进制数 101101 转换为十进制数。
- 写出二进制数:
1 0 1 1 0 1 - 从右往左,标出每一位的 “权值” (2 的几次方):
2^5 2^4 2^3 2^2 2^1 2^01 0 1 1 0 1 - 将每一位的数值乘以对应的权值,然后求和:
(1 * 2^5) + (0 * 2^4) + (1 * 2^3) + (1 * 2^2) + (0 * 2^1) + (1 * 2^0)= (1 * 32) + (0 * 16) + (1 * 8) + (1 * 4) + (0 * 2) + (1 * 1)= 32 + 0 + 8 + 4 + 0 + 1= 45
所以,二进制数 101101 转换为十进制数,就是 45。
2. 十进制转二进制: “除 2 取余,逆序排列”
方法: 将十进制数不断除以 2,每次得到的 “余数” 记录下来,直到商为 0 为止。 然后将所有余数倒过来 (逆序排列),就得到了对应的二进制数。
举例: 将十进制数 45 转换为二进制数。
- 用 45 除以 2,商为 22,余数为 1:
45 ÷ 2 = 22 ... 1 - 用商 22 继续除以 2,商为 11,余数为 0:
22 ÷ 2 = 11 ... 0 - 用商 11 继续除以 2,商为 5,余数为 1:
11 ÷ 2 = 5 ... 1 - 用商 5 继续除以 2,商为 2,余数为 1:
5 ÷ 2 = 2 ... 1 - 用商 2 继续除以 2,商为 1,余数为 0:
2 ÷ 2 = 1 ... 0 - 用商 1 继续除以 2,商为 0,余数为 1:
1 ÷ 2 = 0 ... 1(商为 0,结束) - 将所有余数 逆序排列 (从下往上读):
1 0 1 1 0 1
所以,十进制数 45 转换为二进制数,就是 101101。
3. 二进制转八进制: “三位一组,按组转换” (技巧!)
方法: 将二进制数 从右往左,每 3 位分成一组 (最左边不足 3 位,用 0 补齐), 然后将每一组 3 位二进制数,直接转换为对应的 1 位八进制数。
对照表:
| 二进制 (3 位) | 八进制 (1 位) |
|---|---|
| 000 | 0 |
| 001 | 1 |
| 010 | 2 |
| 011 | 3 |
| 100 | 4 |
| 101 | 5 |
| 110 | 6 |
| 111 | 7 |
举例: 将二进制数 101101110 转换为八进制数。
- 将二进制数从右往左,每 3 位一组划分:
101 101 110 - 将每一组 3 位二进制数,查表转换为对应的 1 位八进制数:
101->5101->5110->6
- 将转换后的八进制数 ** 从左往右排列:
5 5 6
所以,二进制数 101101110 转换为八进制数,就是 556。
4. 八进制转二进制: “一位变三位,展开转换” (技巧!)
方法: 将八进制数的 每一位, 直接转换为对应的 3 位二进制数。
举例: 将八进制数 556 转换为二进制数。
- 将八进制数的每一位,查表转换为对应的 3 位二进制数:
5->1015->1016->110
- 将转换后的二进制数 ** 从左往右排列:
101 101 110
所以,八进制数 556 转换为二进制数,就是 101101110。
5. 二进制转十六进制: “四位一组,按组转换” (技巧!)
方法: 将二进制数 从右往左,每 4 位分成一组 (最左边不足 4 位,用 0 补齐), 然后将每一组 4 位二进制数,直接转换为对应的 1 位十六进制数。
对照表:
| 二进制 (4 位) | 十六进制 (1 位) |
|---|---|
| 0000 | 0 |
| 0001 | 1 |
| 0010 | 2 |
| 0011 | 3 |
| 0100 | 4 |
| 0101 | 5 |
| 0110 | 6 |
| 0111 | 7 |
| 1000 | 8 |
| 1001 | 9 |
| 1010 | A |
| 1011 | B |
| 1100 | C |
| 1101 | D |
| 1110 | E |
| 1111 | F |
举例: 将二进制数 1101011110 转换为十六进制数。
- 将二进制数从右往左,每 4 位一组划分:
11 0101 1110(最左边11不足 4 位,用00补齐:0011 0101 1110) - 将每一组 4 位二进制数,查表转换为对应的 1 位十六进制数:
0011->30101->51110->E
- 将转换后的十六进制数 ** 从左往右排列:
3 5 E
所以,二进制数 1101011110 转换为十六进制数,就是 35E。
6. 十六进制转二进制: “一位变四位,展开转换” (技巧!)
方法: 将十六进制数的 每一位, 直接转换为对应的 4 位二进制数。
举例: 将十六进制数 35E 转换为二进制数。
- 将十六进制数的每一位,查表转换为对应的 4 位二进制数:
3->00115->0101E->1110
- 将转换后的二进制数 ** 从左往右排列:
0011 0101 1110(最左边的00可以省略:1101011110)
所以,十六进制数 35E 转换为二进制数,就是 1101011110。
掌握了这些数制转换的方法,你就能轻松地在不同 “数字语言” 之间自由切换了! 是不是感觉自己也变成了一个 “数字翻译家” 呢? 😉
🤔 为什么要学习 “数制”? (敲黑板!划重点!)
你可能会问:“老师,我学会这些 ‘数制’ 有什么用呢? 我平时都用十进制,好像也没什么问题啊?”
问得好! 👍 就像我们学习英语,虽然平时生活中可能用不到,但是,当你需要 阅读英文资料,或者和外国人交流 时,英语就变得非常重要了。 学习 “数制”,也是为了更好地理解和应用计算机技术。
学习 “数制” 的重要性:
理解计算机内部的数据表示: 计算机内部 所有的数据,最终都是以二进制形式存储和处理的。 理解二进制,是 理解计算机工作原理的基础。
方便阅读和书写二进制: 八进制和十六进制,虽然不是计算机 “母语”,但它们 可以作为二进制的 “简写形式”,方便程序员 阅读和书写较长的二进制数,例如内存地址、机器指令、颜色代码等等。
进行底层编程和硬件操作: 在进行 底层编程 (例如汇编语言编程) 或者进行硬件操作 时,经常需要 直接操作二进制、八进制或十六进制数。 例如,设置寄存器、控制 I/O 端口、分析内存数据等等。
游戏行业应用: 即使是 游戏美术师、建模师、独立游戏开发者,了解数制也有助于:
- 理解颜色代码: 颜色代码 (例如 RGB 颜色值) 经常用十六进制表示。 了解十六进制,可以更好地 理解和使用颜色,进行美术资源制作。
- 理解内存和存储: 了解二进制、八进制、十六进制,可以帮助理解 游戏资源在内存和硬盘中的存储方式和大小, 进行资源优化,减少游戏安装包大小,提高游戏运行效率。
- 进行性能分析和优化: 在进行 游戏性能分析和优化 时,可能需要 查看和分析底层的硬件数据 (例如内存地址、寄存器值等), 了解数制可以帮助你 更好地理解这些数据,进行性能调优。
总而言之,理解 “数制”,是进入计算机世界,提升自身技能,扩展职业发展的重要一步。 无论你将来从事什么方向的计算机相关工作,扎实的 “数制” 基础,都会让你受益匪浅!
📖 总结: 掌握 “数字语言”,畅游计算机世界!
通过今天的学习,我们一起探索了计算机世界里常用的几种 “数制”: 十进制、二进制、八进制、十六进制, 以及它们之间的 互相转换方法。 你现在是不是感觉,自己对计算机的 “数字语言” 已经有了更清晰的认识了呢? 🎉
记住: 二进制是计算机的 “母语”,也是计算机世界的 “基石”; 八进制和十六进制是二进制的 “简写形式”,方便人类阅读和书写; 十进制是我们人类最熟悉的 “母语”,方便日常使用。 掌握了这些 “数字语言”,就如同掌握了 进入计算机世界的 “通行证”, 让你能够 更深入地理解计算机的奥秘,更自由地畅游于数字世界!
继续加油,探索更多计算机的 “语言” 和 “秘密” 吧! 相信你会在这个充满挑战和乐趣的学习过程中,收获满满,成为真正的 “数字达人”! 💪✨