1.5 前缀
表示复杂的数据类型需要大量的位。像数字99这样简单的对象只需要一个字节,而数字格式的视频则可能需要数十亿位。为了更易于表示数据的大小,我们使用了诸如G和M之类的前缀。国际单位制(SI)也被称为公制,定义了一组标准前缀。这些前缀用于描述可以被量化的对象,并不仅限于位。在后面关于电路的章节中,我们还会看到它们。表1-2列出了一些常见的SI前缀及其含义。
表1-2 常见SI前缀
(续)
有了这些前缀,如果我们想说“30亿字节”,就可以用缩写3GB表示。或者,如果我们想表示4000位,我们就可以说4kb。注意,B代表字节,b代表位。
你会发现这种约定一般用于表示位和字节的数量,可惜的是,这在技术上通常也是不正确的。其原因在于:在处理字节时,大多数软件实际是以2为基数的,而不是以10为基数,如果计算机告诉你文件的大小为1MB,那么它实际有1048576字节!这约等于106,但不完全等于。看起来像是个奇怪的数,不是吗?这是因为我们是按十进制来看的。在二进制中,同样的数字表示为0b100000000000000000000,它是220。表1-3展示了在处理字节时如何解释SI前缀。
表1-3 SI前缀应用于字节时的含义
位和字节另一个会混淆的地方和网络传输速率有关。互联网服务提供商通常以每秒位数作为单位,基数为10。因此,如果互联网连接传输速率为50Mb/s,那么就意味着每秒只能传送大约6MB数据。也就是说,每秒50000000位,除以每字节8位,得到每秒6250000字节,用6250000除以220,得到每秒大约6MB。
二进制数据的SI前缀
为了解决由前缀多义性导致的混乱,2002年引入了一组新的前缀(在IEEE 1541标准中)用于二进制场景。当处理2的幂时,Ki用于代替K,Mi用于代替M,以此类推。这些新的前缀对应于以2为基数的值,用于之前不正确使用旧前缀的场合。例如,由于KB可能被解释为1000或1024个字节,因此这个标准就建议使用KiB来表示1024个字节,而KB则保留其原始意义,即KB等于1000个字节[1]。
这看上去是个好主意,但是直到撰写本书的时候,这些符号还未得到广泛使用。表1-4列出了新的前缀及其含义。
表1-4 IEEE 1541-2002二进制数据的前缀
这个差异很重要,因为在实践中,大多数软件在显示文件大小的时候使用的是旧的SI前缀,但在计算大小的时候却是以2为基数的。换句话说,如果你的设备说一个文件的大小是1KB,那么它的意思是说有1024字节。此外,存储设备制造商在为它们的设备容量打广告的时候,则倾向于以10为基数来表示容量大小。这就意味着,广告宣称为1TB的硬盘可能包含1012字节,但是当你把它连接到计算机时,则会显示其容量大约为931GB(1012除以230)。由于新前缀使用率不高,因此本书将继续使用旧的SI前缀。