现代计算机存储和处理的信息都以二值信号表示。这些看似简单的二进制数字,即位(bit),构成了整个数字世界的基石。人类使用以10为基数的十进制已逾千年,这源于我们拥有十根手指的自然习惯。然而,当你深入探究计算机的内部构造时,一个核心问题便浮现出来:为何计算机选择了与我们截然不同的二进制系统?
答案深植于物理实现的可靠性与简洁性。二值信号极易被表示、存储和传输——例如,穿孔卡片的有孔或无孔、导线上的高电压或低电压,或是顺时针与逆时针的磁场。用于存储和计算这些二值信号的电子电路极为简单可靠,这使制造商得以在单块硅片上集成数十亿个这样的电路单元,这正是现代芯片技术的基础。
单独的位本身信息量有限,但当我们将其组合起来,并赋予不同的解释(interpretation)——即定义每种位模式的意义时,就能表示任何有限集合的元素。例如,通过二进制表示法,我们可以用位组来编码非负整数;借助标准的字符编码,我们能够表示文档中的所有字母与符号。

在计算机中,信息是如何被具体解释的呢?这主要依赖于三种重要的数字编码方式:
- 无符号编码:基于传统二进制表示法,用于表示大于或等于零的数字。
- 补码编码:这是表示有符号整数(即可正可负的数字)最常见的方式。
- 浮点数编码:是表示实数(带小数点的数)的科学计数法的二进制版本。
大多数计算机将8位作为一个字节(byte),作为最小的可寻址内存单位,而非直接操作单个的位。机器级程序将内存视为一个极其庞大的字节数组,称之为虚拟内存。内存中的每个字节都有一个唯一的数字标识,即其地址,所有可能地址的集合构成了虚拟地址空间。这一概念上的统一视图,实际上是由DRAM、闪存、磁盘、专用硬件及操作系统软件共同协作实现的。
十六进制表示法
一个字节包含8位。用二进制表示,其范围是 00000000 ~ 11111111;若视为十进制整数,则是0~255。然而,二进制写法过于冗长,十进制与位模式间的转换又不够直观。因此,在计算机科学中,以16为基数的十六进制表示法成为表示位模式的更佳工具。
十六进制(常缩写为“hex”)使用数字‘0’~‘9’和字母‘A’~‘F’(或‘a’~‘f’)来表示16个可能的值。下图清晰地展示了十六进制数字与十进制、二进制值的对应关系。用十六进制表示,一个字节的值域是 00 ~ FF。

在C语言等编程环境中,以 0x 或 0X 开头的数字常量即被视为十六进制值。例如,FA1D37B 可以写作 0xFA1D37B、0xfald37b 或大小写混合的 0xFa1D37b。
对于开发者而言,在二进制、十六进制和十进制间进行手工转换是一项基本技能。其中,二进制与十六进制间的转换最为直接,因为每4位二进制数恰好对应1位十六进制数。一个实用的技巧是:牢记十六进制数字 A(10)、C(12)、F(15) 的十进制值,其他数字如 B(11)、D(13)、E(14) 可通过它们推算得出。
转换示例:十六进制转二进制
给定十六进制数 0x173A4C,我们可以将每位展开为4位二进制数:

由此得到其二进制表示为 000101110011101001001100。
转换示例:二进制转十六进制
反之,将二进制数 1111001010110110110011 转换为十六进制。首先,从右向左按4位一组进行划分,最左侧不足4位时在前面补0:11 1100 1010 1101 1011 0011 变为 0011 1100 1010 1101 1011 0011。然后将每个4位组转换为对应的十六进制数字:

最终得到十六进制结果为 0x3CADB3。
理解位组合与解释的底层逻辑,是掌握计算机如何工作的重要一步。从最基础的电压高低到屏幕上丰富的画面与交互,这一切都始于对二进制位的精巧设计与运用。希望本文能帮助你更清晰地看到这条从物理到逻辑的桥梁。如果你想深入探讨更多计算机底层原理,欢迎访问 云栈社区 与更多开发者交流。
|