计算机内部所有信息(包括指令、数据等)都以二进制的形式存储和处理。
数据
在计算机中,所有数据都是以二进制的形式表示的。
以下是不同类型数据的二进制表示方式的一些例子:
- 整数:
- 无符号整数:直接使用二进制表示数字的值。
例如:5 在8位二进制中表示为 00000101 - 有符号整数(通常使用补码表示):
- 正数:与无符号相同。
- 负数:取其正数的二进制表示,然后反转所有位(取反)并加1。
例如:-5 的8位二进制补码表示为 11111011
- 浮点数:使用IEEE 754标准来表示。
例如:数字 0.15625 在单精度IEEE 754浮点表示中为 00111110001000000000000000000000 - 字符:字符常使用ASCII码或其他编码如Unicode进行表示。
例如:字符 'A' 在ASCII中的表示为 01000001 - 布尔值:
- True 通常表示为 1
- False 通常表示为 0
- 颜色:在计算机图形中,颜色通常使用RGB(红绿蓝)模式表示。每种颜色通常使用8位二进制数(一个字节)表示,取值范围为0-255。
例如:红色可以表示为 11111111 00000000 00000000,即红色值为255,绿色和蓝色值都为0。 - 图像和音频:它们通常由一系列二进制数表示,这些二进制数对应于图像的像素值或音频的采样值。
总之,所有的计算机数据都可以表示为二进制形式,不同类型的数据可能会有不同的编码和格式规范。
指令
在计算机中,指令是以二进制编码的形式表示的。这种编码指示了CPU应该执行的特定操作,以及涉及的操作数或寄存器。具体的二进制格式取决于特定的指令集架构(ISA)。
为了解释这一点,让我们考虑一个简化的虚构例子。假设我们有一个简单的ISA,其中只有以下四个指令:
- LOAD:从内存加载数据到寄存器
- STORE:将数据从寄存器存储到内存
- ADD:将两个寄存器的值相加并存储结果
- SUB:从一个寄存器中减去另一个寄存器的值
对于这个简化的ISA,我们可以为每个指令分配一个二进制编码:
LOAD -> 00
STORE -> 01
ADD -> 10
SUB -> 11
然后,为简化,假设我们只有两个寄存器,R0和R1,它们可以这样编码:
R0 -> 00
R1 -> 01
现在,如果我们要编写一个指令LOAD R0, [address]
(意思是从某个内存地址加载数据到R0),它可以这样编码:
指令 寄存器 内存地址
------------------------
00 00 [address的二进制表示]
以同样的方式,ADD R0, R1可以表示为:
指令 寄存器1 寄存器2
------------------------
10 00 01
这只是一个简化的示例,实际的ISA(如x86, ARM等)会有更多的指令、更复杂的编码规则和多个寄存器。
这种表示方法的优点是机器可以非常快速地识别和执行二进制指令,但是对于人类来说,直接处理这些二进制代码是不方便的,因此我们通常使用汇编语言作为中间表示形式,然后使用汇编程序将汇编代码转换为机器代码(即二进制指令)。
计算实现
计算机的基本电子元件(例如晶体管)有两种状态:开或关,这可以很自然地映射为二进制系统中的0和1。
下面通过发射极接地时的开关工作来介绍起到开关作用的晶体管。
- 当晶体管的基极引脚被施加电压(约0.7V以上)并流过微小电流时,晶体管会导通,电流会在集电极和发射极之间流动。
- 反之,当施加到基极引脚的电压较低(约0.7V以下)时,集电极和发射极处于关断状态,电流不流动。
晶体管的开关工作就像使用基极作为开关来打开和关闭从集电极流向发射极的电流。
基于晶体管的开关特征,最早的计算机就是基于它来构建的。
图:1953 年 11 月 16 日,在英国曼彻斯特大学汤姆·基尔伯恩 (Tom Kilburn) 的带领下,理查德·格里姆斯代尔 (Richard Grimsdale) 和道格拉斯·韦伯 (Douglas Webb) 展示了晶体管计算机原型“曼彻斯特 TC”。这台 48 位机器使用了 92 个点接触晶体管和 550 个二极管。
https://www.computerhistory.org/timeline/1953/#169ebbe2ad45559efbc6eb35720bfc24
存储实现
数据存储的基本单位是"比特"(bit),它可以是0或1。而计算机和其他数字设备使用各种物理方式来表示这些二进制状态。以下是磁盘、光盘和闪存中数据是如何存储和识别的:
磁盘(例如硬盘):
原理:硬盘上有许多微小的磁区域,这些区域可以被磁化为两个可能的方向之一。每个方向代表二进制中的一个值,例如0或1。
存储:磁头在磁盘上移动并改变这些磁区域的磁化方向,从而存储数据。
读取:当磁头在磁盘上移动并探测这些磁区域的磁化方向时,它可以读取出相应的0或1的数据。
光盘(例如CD、DVD):
原理:光盘的表面有许多微小的坑和平坦区域(通常称为“地”和“坑”)。这些地和坑代表二进制的0和1。
存储:在制造或写入时,使用激光来“烧”出坑。
读取:再次使用激光读取数据时,当激光被反射回来并被检测器捕获时,根据反射的方式可以确定是坑还是地,从而确定是0还是1。
闪存(例如USB驱动器、SD卡):
图:闪迪 Cruzer TitaniumU盘的印刷电路板上的Samsung闪存(左)慧荣科技(Silicon Motion)主控芯片(右)
原理:闪存使用半导体技术。它的基础是一个名为浮栅晶体管的组件。浮栅可以持有或不持有电荷,代表二进制的1和0。
存储:通过改变浮栅的电荷状态来存储数据。
读取:通过测量晶体管的电导率,设备可以确定浮栅是否持有电荷,从而确定数据是0还是1。
计算机通讯
网络上的通信也都是基于二进制数据的。
以太网传输:
当你的计算机通过以太网发送数据时,数据被分割成多个数据包。每个数据包都包含源地址、目标地址和其他信息。
这些地址和数据都被转换成二进制形式。例如,一个IP地址如192.168.1.1会被转换为二进制形式的“11000000.10101000.00000001.00000001”。
数据包在网络上以电信号或光信号的形式传输,这些信号在物理层面对应于二进制的0和1。
无线通信:
当你使用Wi-Fi或蜂窝网络时,数据也是以二进制的形式进行传输的。
在无线通信中,二进制数据通常被转换为射频(RF)信号。例如,在Wi-Fi通讯中,1可能表示一个特定的射频波形,而0表示另一个波形。
总结
二进制是计算机的基础,因为它为计算机提供了一个简单、有效和可靠的方式来存储、处理和传输数据。
基本工作原理:计算机的硬件组件(特别是其基本元件如晶体管)在物理层面上有两种状态:开或关、高电压或低电压。这两种状态可以用二进制中的0和1来表示,因此,使用二进制系统来表示计算机中的数据和指令是很自然的。
存储和表示数据:在计算机内部,所有的数据(包括文字、图像、声音等)都被转化为二进制形式进行存储和处理。例如,字母“A”在ASCII编码中被表示为“01000001”。
计算和逻辑操作:计算机中的算术和逻辑运算(如加、减、与、或、非等)都是在二进制形式的数据上进行的。二进制也使得实现这些操作变得简单和高效。
编程和软件:计算机的指令集和机器语言都基于二进制。高级编程语言编写的程序在执行之前会被转换为二进制的机器码,以便计算机能够理解和执行。
通信:当数据在网络中传输或在设备之间进行通信时,数据通常会被转化为二进制形式。