阅读 ‧ 电子书库 位、字节和字
术语位、字节和字用于描述计算机数据单位或计算机存储单位。这里主要指存储单位。
最小的存储单位称为位(bit)。它可以容纳两个值(0或1)之一(或者可以称该位被置为“关”或“开”)。不能在一个位中存储更多的信息,但是计算机中包含数量极其众多的位。位是计算机存储的基本单位。
字节(byte)是常用的计算机存储单位。几乎对于所有的机器,1个字节均为8位。这是字节的标准定义,至少在衡量存储单位时是这样(C语言中对此有不同的定义,请参见本章“使用字符:char类型”小节)。由于每个位或者是0或者是1,所以一个8位的字节包含256 (2的8次方)种可能的0、1组合。这些组合可用于表示0到255的整数或者一组字符。这种表示可以通过二进制编码(仅使用0或1方便地表示数字)来实现(第15章“位操作”将讨论二进制编码,如果有兴趣您可以现在浏览一下该章的介绍性内容)。
对于一种给定的计算机设计,字(word)是自然的存储单位。对于8位微机,比如原始的Apple机,一个字正好有8位。使用80286处理器的早期IBM兼容机是16位机,这意味着一个字的大小为16位。基于Pentium的PC机和Macintosh PowerPC中的字是32位。更强大的计算机可以有64位甚至更长位数的字。
3.3.1 整数类型与浮点数类型

整数类型?浮点数类型?如果您觉得这些术语非常陌生,请放松一下,下面将总结二者的含义。如果您不熟悉位、字节和字这些概念,请先阅读前面有关它们的解释。您无须了解所有的细节,就像您无须了解汽车内部引擎的原理就可以进行驾驶一样,但是了解一些计算机或汽车引擎内部所做的事情将对您有所帮助。

对于人,整数和浮点数的区别在于它们的书写。对于计算机,区别在于它们的存储方式。下面分别对它们进行介绍。

3.3.2 整数

整数(integer)就是没有小数部分的数。在C中,小数点永远不会出现在整数的书写中。例如2、-23和2456都是整数。数3.14、0.22和2.000都不是整数。整数以二进制数字存储。例如整数7的二进制表示为111,在8位的字节中存储它需要将前5位置0,将后3位置1,如图3.2所示。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

阅读 ‧ 电子书库

图3.2 使用二进制编码存储整数7
3.3.3 浮点数

浮点数(floating-point)差不多可以和数学中的实数(real number)概念相对应。实数包含了整数之间的那些数。2.75、3.16E7、7.00和2e-8都是浮点数。注意,加了小数点的数是浮点型值,所以7是整数类型,而7.00是浮点型。显然,书写浮点数有多种形式。本书将在后面详细介绍e记数法,这里仅做简要介绍:简单地说,3.16E7表示3.16乘以10的7次方(即1后面带有7个0),7称为10的指数。

这里最重要的一点是浮点数与整数的存储方案不同。浮点数表示法将一个数分为小数部分和指数部分并分别存储。因此尽管7.00和整数7有相同的值,但它们的存储方式不同。与机器中的二进制存储方式相似,在十进制中7.0可表示为0.7E1,这里0.7是小数部分,1是指数部分。图3.3所示为浮点数存储的另一个例子。当然,计算机的内部存储使用二进制数字,它使用2的幂而非10的幂。在第15章可以找到有关这一主题的更多讨论,这里我们只关注这两种类型在应用中的区别:

阅读 ‧ 电子书库

图3.3 以浮点格式存储实数(十进制版本)
● 整数没有小数部分;浮点数可以有小数部分。
● 浮点数可以表示比整数范围大得多的数,详见本章结尾表3.4。
● 对于一些算术运算(例如两个很大的数相减),使用浮点数会损失更多精度。
● 因为在任何区间内(比如1.0和2.0之间)都存在无穷多个实数,所以计算机浮点数不能表示区域内所有的值。浮点数往往只是实际值的近似。例如,7.0可能以浮点值6.99999存储。稍后我们将讨论更多有关精度的内容。
● 浮点运算通常比整数运算慢。不过,已经开发出了专门处理浮点运算的微处理器,它可以缩小速度上的差别。