位和字节

如果您使用计算机的时间超过五分钟,那么肯定听说过字节这样的词。RAM硬盘都使用字节作为容量单位,您在文件查看器中查看文件时的文件大小也以字节为单位显示。

您可能听过这样一句广告词:“该计算机拥有32位奔腾处理器,配备了64兆字节的RAM和2.1吉字节的硬盘。”在许多博闻网文章里也都提到过字节(例如CD的工作原理)。在本文中,我们将讨论位和字节,使您对此有一个完整的了解。

十进制数
了解位的最简单方法就是将其与您知道的事物进行比较:数位。数位是可以包含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的0次幂),每个数位都是下一个更高的10次幂的占位符。

对此我们都应感到非常熟悉——每天我们都在与十进制位打交道。数字体系的巧妙之处在于不会强制规定一个数位必须有10个可能的值。我们会建立起十进制的数字体系很可能是因为我们有10个手指,但如果我们恰好进化为只有八个手指,那么可能会拥有以8为基数的数字体系。您可以拥有以任意数为基数的数字体系。实际上,在不同情况下使用不同的基数有很多好处。


计算机恰好使用以2为基数的数字体系进行运算,也称为二进制数字体系(就如同以10为基数的数字体系称为十进制数字体系一样)。

计算机使用二进制的原因在于,它更容易利用当前的电子技术制造出计算机。您可以设计并制造以10为基数进行运算的计算机,但目前看来其价格将异常昂贵。相对地,以2为基数的计算机比较便宜。

所以计算机使用二进制数,并使用二进制位取代十进制位。单词bit(位)是“Binary digIT”(二进制位)的缩写。十进制位有从0到9的10个可能的值,但二进制位仅有两个可能的值——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的升幂的值。这使得以二进制进行计算非常容易。0到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的工作原理篇文章中,您知道每次采样时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个字节的内存(包括为单词之间的每个空格使用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)——计算机实际上处理的是这种形式的内容。

标准ASCII字符集有32个值(0-31)是用于回车符及换行符这样的字符的编码。空格符为第33个值,后面跟的是标点、数字、大写字符和小写字符。

0   NUL
  1   SOH
  2   STX
  3   ETX
  4   EOT
  5   ENQ
  6   ACK
  7   BEL
  8   BS
  9   TAB
10   LF
11   VT
12   FF
13   CR
14   SO
15   SI
16   DLE
17   DC1
18   DC2
19   DC3
20   DC4
21   NAK
22   SYN
23   ETB
24   CAN
25   EM
26   SUB
27   ESC
28   FS
29   GS
30   RS
31   US
32
33   !
34   "
35   #
36   $
37   %
38   &
39   '
40   (
41   )
42   *
43   +
44   ,
45   -
46   .
47   /
48   0
49   1
50   2
51   3
52   4
53   5
54   6
55   7
56   8
57   9
58   :
59   ;
60   <

61   =
62   >
63   ?
64   @
65   A
66   B
67   C
68   D
69   E
70   F
71   G
72   H
73   I
74   J
75   K
76   L
77   M
78   N
79   O
80   P
81   Q
82   R
83   S
84   T
85   U
86   V
87   W
88   X
89   Y
90   Z
91   [
92   
93   ]
94   ^
95   _
96   `
97   a
98   b
99   c
100   d
101   e
102   f
103   g
104   h
105   i
106   j
107   k
108   l
109   m
110   n
111   o
112   p
113   q
114   r
115   s
116   t
117   u
118   v
119   w
120   x
121   y
122   z
123   {
124   |
125   }
126   ~
127   DEL

  •  
    当涉及大量字节时,您会接触到诸如千、兆、吉之类的前缀,如千字节、兆字节和吉字节(简写为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

    在该表中您可以看到,千约为一千,兆约为一百万,吉约为十亿等等。所以,当有人说“这台计算机具有2G的硬盘”时,他的意思是硬盘能够存储2吉字节(GB),或大约20亿个字节,或精确到2,147,483,648个字节。您怎么可能需要2吉字节的空间呢?但如果想想一张CD具有650兆字节(MB)容量时,便会明白只要三张CD包含的数据便可以占满整个空间!太字节(TB)数据库目前很常见,而且现在美国五角大楼可能正在使用容量达拍字节(PB)大小的数据库。

    二进制数学 二进制数学运算与十进制数学很相似,不同之处在于每个位的值只能为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。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值