欢迎来到进位制的世界!

你好!本章是理解计算机如何存储和处理所有数据(从你最喜欢的照片到游戏中的指令)的基础。这一切的核心,就是我们如何进行计数!

我们每天都在使用十进制,但计算机需要一套更简单的系统,因为电子设备的状态要么是“通”(ON),要么是“断”(OFF)。这就是二进制十六进制发挥作用的地方。

如果起初觉得有些复杂,别担心! 我们将通过简单的类比来拆解这些复杂的概念,确保你能够掌握这些核心技能。让我们开始吧!

计算机为什么要使用不同的进位制?(数据表示背景)

你使用十进制(基数为 10)是因为你有十根手指。然而,计算机是由电子开关组成的。这些开关只能处于以下两种状态之一:

  • ON(通电状态,意味着电流正在流动)
  • OFF(断电状态,意味着电流没有流动)

这种 ON/OFF 系统非常适合二进制,它只使用两个数字:1 和 0。


1. 十进制(基数为 10):我们熟悉的系统

十进制(Denary)是你日常生活中使用的编号系统。它也称为基数为 10,因为它使用了 10 个不同的数字(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)。

理解位值(Place Value)

在十进制中,数字的位置决定了它的数值。这些位置是 10 的幂:

示例:数字 345

  • 5 位于 \(10^0\)(个位)列 = \(5 \times 1\) = 5
  • 4 位于 \(10^1\)(十位)列 = \(4 \times 10\) = 40
  • 3 位于 \(10^2\)(百位)列 = \(3 \times 100\) = 300

十进制只是起点,但理解这里的位值是掌握二进制的关键!


2. 二进制(基数为 2):计算机的语言

二进制(Binary)是计算机使用的编号系统。它被称为基数为 2,因为它只使用两个数字:01

  • 单个二进制数字(0 或 1)称为(Bit,即 Binary Digit)。
  • 八个位组成一个字节(Byte)。

二进制位值

就像十进制使用 10 的幂一样,二进制使用 2 的幂。我们通常使用 8 位(一个字节)来进行标准的数据表示。

8 位二进制数的位值(权重)为:

\(2^7\), \(2^6\), \(2^5\), \(2^4\), \(2^3\), \(2^2\), \(2^1\), \(2^0\)

计算后得到的权重是:

128 | 64 | 32 | 16 | 8 | 4 | 2 | 1

快速回顾: 每个 1 表示开关处于 ON(该值被计入);每个 0 表示开关处于 OFF(该值被忽略)。


3. 二进制转换为十进制

这通常是最简单的转换!我们使用刚才学习的位值列即可。

分步转换:二进制转十进制

目标: 将二进制数 10110010 转换为十进制。

  1. 写出 8 位位值(权重):

    128 | 64 | 32 | 16 | 8 | 4 | 2 | 1

  2. 将二进制数写在下方:

    128 | 64 | 32 | 16 | 8 | 4 | 2 | 1
    1 | 0 | 1 | 1 | 0 | 0 | 1 | 0

  3. 找出标记为 '1' 的列(即“ON”开关):

    128, 32, 16 和 2

  4. 将对应的值相加:

    \(128 + 32 + 16 + 2 = 178\)

  5. 得出最终结果:

    10110010 的十进制等值为 178

核心要点: 二进制转十进制只需将出现 '1' 的位值相加即可。


4. 十进制转换为二进制

这种转换需要计算出要凑成该十进制数需要哪些 2 的幂(哪些列)。我们使用减法法

分步转换:十进制转二进制

目标: 将十进制数 210 转换为二进制。

  1. 从最大的可能位值(128)开始:
    能否从 210 中减去 128?可以。
    210 - 128 = 82
    结果:在 128 列下方填入 1
  2. 移至下一列(64):
    能否从剩余的 82 中减去 64?可以。
    82 - 64 = 18
    结果:在 64 列下方填入 1
  3. 继续进行后续列的计算:
    • 32: 能否从 18 中减去 32?不能。(填 0
    • 16: 能否从 18 中减去 16?可以。 18 - 16 = 2(填 1
    • 8: 能否从 2 中减去 8?不能。(填 0
    • 4: 能否从 2 中减去 4?不能。(填 0
    • 2: 能否从 2 中减去 2?可以。 2 - 2 = 0(填 1
    • 1: 剩余数字为 0。(填 0
  4. 读取最终的二进制代码:

    128 | 64 | 32 | 16 | 8 | 4 | 2 | 1
    1 | 1 | 0 | 1 | 0 | 0 | 1 | 0

210 的二进制等值为 11010010

需要避免的常见错误: 务必确保每次减法都是针对*剩余*的总数,而不是原始数字!


5. 十六进制(基数为 16):速记工具

二进制对计算机来说很完美,但长串的 1 和 0 对于人类来说很难阅读、书写和记忆,且极易出错!

十六进制(Hexadecimal,简称 Hex)被用作一种快捷方式。它被称为基数为 16,因为它使用了 16 个唯一的字符。

16 个十六进制数字

十六进制使用 0 到 9 的数字,以及字母 A 到 F 来表示 10 到 15 的值:

十六进制位十进制值二进制值(4位)
000000
.........
991001
A101010
B111011
C121100
D131101
E141110
F151111

你知道吗? 十六进制在处理内存地址、错误代码和定义颜色(例如纯红色的网页代码 #FF0000)时非常常见。


6. 二进制与十六进制之间的转换

十六进制的妙处在于,一个十六进制位正好可以完美表示四个二进制位(称为半字节,nibble)。

由于一个字节是 8 位,因此两个十六进制位就可以完美代表一个字节。

A) 二进制转十六进制

目标: 将二进制数 11011001 转换为十六进制。

  1. 从右向左将二进制数分为四位一组(半字节):

    1101 | 1001

  2. 将每组转换为对应的十进制值:
    • 第 1 组 (1101): \(8 + 4 + 0 + 1 = 13\)
    • 第 2 组 (1001): \(8 + 0 + 0 + 1 = 9\)
  3. 将十进制值转换为十六进制等值:
    • 十进制 13 在十六进制中是 D
    • 十进制 9 在十六进制中是 9
  4. 合并十六进制位:

    11011001 的十六进制等值为 D9

B) 十六进制转二进制

这是反向过程:取每个十六进制位,写出其对应的 4 位二进制代码。

目标: 将十六进制数 A5 转换为二进制。

  1. 处理第一位 (A):

    A 在十进制中等于 10。10 的 4 位二进制代码是 1010

  2. 处理第二位 (5):

    5 在十进制中等于 5。5 的 4 位二进制代码是 0101

  3. 合并这两个 4 位组:

    A5 的二进制等值为 10100101

C) 十进制转十六进制

将十进制转换为十六进制(或反之)最简单的方法是以二进制作为中间桥梁。这可以使计算方法保持简单,并减少错误。

示例:将十进制 150 转换为十六进制:

  1. 十进制 150 -> 二进制: 使用减法法,得到 10010110
  2. 二进制 10010110 -> 十六进制: 分为半字节:10010110
  3. 1001 是 9。0110 是 6。
  4. 结果:96(十六进制)。

进位制快速回顾

三种进位制
  • 十进制(基数为 10): 数字 0-9。人类使用。位值是 10 的幂(1, 10, 100...)。
  • 二进制(基数为 2): 数字 0, 1。计算机使用。位值是 2 的幂(1, 2, 4, 8...)。
  • 十六进制(基数为 16): 数字 0-9 和 A-F。作为人类可读的二进制速记法。
记忆小贴士:十六进制字母

记住 'F' 是最大的单个十六进制数字(十进制中的 15,或二进制中的 1111)。

恭喜!你现在已经掌握了数据表示的基本工具。请继续练习这些转换——它们是考试中至关重要的技能!