位和字节的工作原理

作者: Marshall Brain
binary numbers
随机多彩的二进制数字! Matejmo / Getty Images

如果你使用电脑超过五分钟,那么你一定听过字节这两个词。无论是RAM还是硬盘的容量,都以字节为单位,文件大小在文件浏览器中查看时也是如此。

你可能会听到这样的广告语:“这台电脑配有32位奔腾处理器,64兆字节的RAM和2.1千兆字节的硬盘空间。”许多十万个为什么文章都谈到字节(例如,光盘的工作原理)。在本文中,我们将讨论位和字节,以便你有一个完整的理解。

广告

十进制数

理解位的最简单方法是将其与你熟悉的事物进行比较:数字位。一个数字位是能容纳0到9之间数值的单个位置。数字位通常组合在一起以创建更大的数字。例如,6,357有四位数字。在数字6,357中,我们知道7占据“个位”,5占据十位,3占据百位,6占据千位。所以如果你想明确表达,可以这样表示:

(6 * 1000) + (3 * 100) + (5 * 10) + (7 * 1) = 6000 + 300 + 50 + 7 = 6357

另一种表达方式是使用10的幂。假设我们用“^”符号表示“多少次方”的概念(所以“10的平方”写为“10^2”),另一种表达方式是这样:

(6 * 10^3) + (3 * 10^2) + (5 * 10^1) + (7 * 10^0) = 6000 + 300 + 50 + 7 = 6357

从这个表达式可以看出,每个数字位都是下一个更高10次幂的占位符,第一个数字位从10的零次方开始。

这应该感觉相当舒服——我们每天都与十进制数字打交道。数制的一个巧妙之处在于,没有任何东西强制你让一个数字位包含10个不同的值。我们的十进制数制很可能是因为我们有10根手指而产生的,但如果我们碰巧进化出8根手指,那么我们可能会有一个八进制数制。你可以拥有任意进制的数制。事实上,在不同情况下使用不同进制有很多充分的理由。

计算机恰好使用二进制数制,也称为二进制系统(就像十进制数制被称为十进制系统一样)。在下一节中了解其原因和工作原理。

广告

二进制系统和8位字节

计算机使用二进制系统的原因在于,目前的电子技术更容易实现它们。你可以连接并构建以十进制运行的计算机,但目前它们将极其昂贵。另一方面,二进制计算机相对便宜。

因此,计算机使用二进制数,并因此使用二进制位来代替十进制数字位。单词bit是“Binary digIT”(二进制数字)的缩写。十进制数字位有10个可能的值,范围从0到9,而位只有两个可能的值:0和1。因此,一个二进制数仅由0和1组成,例如:1011。你如何计算二进制数1011的值?你用与上面计算6357相同的方法,但使用基数2而不是基数10。所以:

广告

(1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) = 8 + 0 + 2 + 1 = 11

你可以看到,在二进制数中,每个位都表示2的递增幂的值。这使得用二进制计数变得相当容易。从零开始到20,十进制和二进制的计数方式如下所示:

 0 =     0
 1 =     1
 2 =    10
 3 =    11
 4 =   100
 5 =   101
 6 =   110
 7 =   111
 8 =  1000
 9 =  1001
10 =  1010
11 =  1011
12 =  1100
13 =  1101
14 =  1110
15 =  1111
16 = 10000
17 = 10001
18 = 10010
19 = 10011
20 = 10100

当你观察这个序列时,0和1在十进制和二进制数制中是相同的。在数字2处,你会看到二进制系统中首次发生进位。如果一个位是1,你给它加1,这个位就变为0,下一个位变为1。从15到16的转换中,这个效果通过4位进行翻转,将1111变成10000。

在计算机中,位很少单独出现。它们几乎总是被捆绑成8位的集合,这些集合被称为字节。为什么一个字节有8位?一个类似的问题是:“为什么一打有12个鸡蛋?”8位字节是人们在过去50年中通过反复试验确定的。

一个字节包含8位,可以表示从0到255的256个值,如下所示:

  0 = 00000000
  1 = 00000001
  2 = 00000010
   ...
254 = 11111110
255 = 11111111

在文章光盘的工作原理中,你了解到一张CD每个样本使用2个字节,即16位。这使得每个样本的范围从0到65,535,如下所示:

    0 = 0000000000000000
    1 = 0000000000000001
    2 = 0000000000000010
     ...
65534 = 1111111111111110
65535 = 1111111111111111

接下来,我们将看看字节的一种用途。

广告

标准ASCII字符集

字节经常用于在文本文档中存储单个字符。在ASCII字符集中,0到127之间的每个二进制值都被赋予一个特定的字符。大多数计算机扩展了ASCII字符集,以使用一个字节中可用的全部256个字符范围。高128个字符处理特殊事物,例如常见外语中的带重音符号的字符。

你可以在下面看到127个标准ASCII码。计算机使用这些代码在磁盘内存中存储文本文档。例如,如果你在Windows 95/98中使用记事本创建一个包含“Four score and seven years ago”的文本文件,记事本将为每个字符使用1字节内存(包括单词之间的每个空格字符——ASCII字符32)。当记事本将该句子存储到磁盘文件中时,该文件也将包含每个字符和每个空格1字节的内容。

广告

尝试这个实验:在记事本中打开一个新文件,并插入句子“Four score and seven years ago”。将文件以getty.txt的名称保存到磁盘。然后使用资源管理器查看文件大小。你会发现该文件在磁盘上大小为30字节:每个字符1字节。如果你在句子末尾添加另一个单词并重新保存,文件大小将跳至相应的字节数。每个字符占用一个字节。

如果你以计算机看待文件的方式来看待该文件,你会发现每个字节包含的不是字母,而是数字——这个数字是与字符对应的ASCII码(见下文)。因此在磁盘上,文件的数字看起来像这样:

 F   o   u   r     a   n   d      s   e   v   e   n
70 111 117 114 32 97 110 100 32 115 101 118 101 110

通过查看ASCII表,你可以看到每个字符与所使用的ASCII码之间的一一对应关系。请注意空格使用32——32是空格的ASCII码。如果我们想技术上正确,可以将这些十进制数展开为二进制数(所以32 = 00100000)——这就是计算机实际处理事物的方式。

前32个值(0到31)是回车和换行等内容的编码。空格字符是第33个值,后面是标点符号、数字、大写字符和小写字符。要查看所有127个值,请查阅Unicode.org的图表

接下来,我们将了解字节前缀和二进制数学。

广告

字节前缀和二进制数学

当你开始谈论大量的字节时,你会遇到像千、兆、吉等前缀,例如千字节、兆字节和千兆字节(也缩写为K、M和G,如Kbytes、Mbytes和Gbytes或KB、MB和GB)。下表显示了二进制乘数:

千 (K)

2^10 = 1,024

广告

兆 (M)

2^20 = 1,048,576

吉 (G)

2^30 = 1,073,741,824

太 (T)

2^40 = 1,099,511,627,776

拍 (P)

2^50 = 1,125,899,906,842,624

艾 (E)

2^60 = 1,152,921,504,606,846,976

泽 (Z)

2^70 = 1,180,591,620,717,411,303,424

尧 (Y)

2^80 = 1,208,925,819,614,629,174,706,176

你可以在这个图表中看到,千大约是一千,兆大约是一百万,吉大约是十亿,依此类推。所以当有人说:“这台电脑有2吉硬盘”时,他或她的意思是硬盘存储2千兆字节,或者大约20亿字节,或者精确地2,147,483,648字节。你究竟如何能需要2千兆字节的空间?当你考虑到一张CD能容纳650兆字节时,你会发现仅仅三张CD的数据就能填满整个硬盘!目前,太字节数据库已经相当普遍,五角大楼可能已经有了一些拍字节数据库。

二进制数学的工作原理就像十进制数学一样,只是每个位的值只能是0或1。为了对二进制数学有个概念,我们从十进制加法开始,看看它是如何工作的。假设我们要将452和751相加:

  452
+ 751
  ---
 1203

要将这两个数字相加,你从右侧开始:2 + 1 = 3。没问题。接下来,5 + 5 = 10,所以你保留0并将1进位到下一个位置。再接下来,4 + 7 + 1(因为进位)= 12,所以你保留2并将1进位。最后,0 + 0 + 1 = 1。所以答案是1203。

二进制加法的工作原理完全相同:

  010
+ 111
  ---
 1001

从右侧开始,第一位0 + 1 = 1。没有进位。第二位是1 + 1 = 10,所以保留0并进位1。第三位是0 + 1 + 1 = 10,所以保留0并进位1。最后一位是0 + 0 + 1 = 1。所以答案是1001。如果你将所有内容转换为十进制,你会发现它是正确的:2 + 7 = 9。

要了解如何使用门实现布尔加法,请参阅布尔逻辑的工作原理

总而言之,以下是我们关于位和字节的学到的内容:

  • 位是二进制数字。一个位可以存储值0或1。
  • 字节由8个位组成。
  • 二进制数学的工作原理就像十进制数学一样,但每个位的值只能是0或1。

其实就这么简单——位和字节就是这么回事。

有关位、字节和相关主题的更多信息,请查看下一页的链接。

广告

广告

加载中...