字节的奥秘

在数码产品中,最常见的名词就是“字节”了。不管是U盘容量、手机存储空间,还是网络带宽,下载速度,都会涉及所谓“字节”这个单位。但到底“字节”是一个什么东西呢?本章就为你说明这个问题

1.1阴阳八卦和十个手指头

1.1.1假如人类是四趾动物

数码产品与数学的关联非常深,而数学又是由数字组成的学问,所以我们现在数字开始说。在世界上,所有民族的数字“单位”几乎都是一样的,就是分为十个数字:一、二、三、四、五、六、七、八、九、十。许多人平时可能都不会去考虑,为何我们的数字会是十个,而不是七个,或者八个呢?事实上,如果人类和米老鼠一样是四个手指;或者人类是从鸟类进化来的“鸟人”,拥有四个指头,那么这个世界上的数字也许就只有从一到八了。因为原始人类社会中,由于每个人有十个手指,因此在使用数字的时候,最小的一组数字单位就正好用一个人的全部手指来充当。这样作为最小的一组数字,造成了数字的进位就以十为基础。所以十进制,仅仅是和使用数字的人,习惯使用的算术工具有关系而已;而数字本身,是可以用任意的“进制”的。

[鸟类的脚趾只有四个]

1.1.2洞悉本质的老子

数字是可以用“任意进制”的,如果我们要“发明”一种:“数字”最少的计算方法,可以最少只用几个数字了?答案是“二”。对于计算机来说,它们天生都是“两趾”的:电压分高、低;磁极分南、北;电流有通、断,所以二进制是现在计算机的基础进制。也就是说,只要有0和1两个数字,就可以表达世界上一切数目。这个观点乍一听有点不可思议:既然我们可以只用两个数字就可以了,为何还要发明出另外八个数字呢?其实中国人的先哲中,有一位早就说明这个道理,他就是老子,他写道:道生一、一生二,二生三,三生万物。意思大概是阴阳两种事物,可以组合表达出万事万物。所以在八卦的图形上,阴阳表达为横线,中间有断开的是阴,没断开的是阳。

八卦则由三根这种代表阴阳的横线组成,不同的八种三根横线的组合,构成了八个不同的含义。这八个卦象,人们认为可以表达万事万物。在二进制来说,我们可以看成阴是0,阳是1,这样3位二进制数,刚好能容纳0-7一共8个数字。对于这样的二进制数,每条横线是一个数字单位,成为“位”,英文是“bit”。比如表达十进制里面的7,需要用三个二进制数表达:1,1,1(阳阳阳),这里就是用了三个“位”的二进制数。如果你要表达更大的数目,就需要用更多的“位”。我们现在数码科技中使用的最小信息单位,也就是“位”。而“字节”(英文叫“byte”),则是由八个“位”组合成的另外一个单位。

[三位二进制数表示的8个序列的八卦]

1.1.3最小信号盒子

在第一章中,我们讲过,世界上所有的信息都能用数字来表达。我们的数字又是用最小数字的方法——二进制来构成的,所以当需要说明一串用来表达信息的数字,它们有多大的时候,我们可以说这串数字有多少个“位”。如“1000100111111110”这串二进制数(可能表达的是两个英文字母,也可能是小于65535的一个正整数),我们通过数一下他的长度,就可以说它有16“位”的长度。但是16位这么长的数,才表达两个字符或一个六万五以内整数,显得不太好理解,所以我们一般较少直接用“位”这个最小的数码单位,而是用另外一个更容易理解的单位——“字节”。

由于每八个“位”可表达一个拉丁文的字符(拉丁字母表才几十个字,汉字就不行了),所以我们就喜欢把八个“位”看成一个单位“字节”,说一段数字有多少个字节,就表示这段数字能表达多少个“字”(英文字)。尽管数字可表达的内容不止是文字,但是“字节”还是因为人们觉得“形象”而成为数字信息的单位。我们可以把每个“字节”看成一个小小的数字“盒子”,里面可以放八个“0”、“1”数字,计算机就可以这样以一个个的“数字盒子”来处理信息了。假如有一个盒子里面没装满,一般就把空位(高位)填上0。

现在我们用的电脑、手机,几乎都是以字节为单位处理信息的,所以购买电脑、手机产品时、标签上的标记的单位,如16Gbytes, 256G bytes都用bytes字节做单位。但是通信带宽,还是习惯用bit“位”位单位,如100Mbit/S(网卡速度)、12Mbit/S(ADSL带宽)。有时候我们会奇怪:明明写着带宽是12M/秒,为什么下载速度只有1M/秒了?其实是因为两个计算的单位不一样,带宽的标记单位是“位”,12Mbit/秒其实等于1.5Mbyte/秒,所以下载速度最多是一点几M“字节”每秒。电脑上显示的基本都是byte字节为单位的嘛。早期的电视游戏卡带,号称16M大容量的游戏,却可以拷贝到2张3.5寸软盘(1.44M容量)中,也是这个道理,因为卡带的容量单位是“位”,而软盘的容量单位是“字节”,16Mbit仅仅只有2Mbyte而已,2张软盘绰绰有余了。

1.2 KMGT

1.2.1容量和速度的单位

在各种各样的数码产品中,一般都会有两个指标:一是速度,一是容量。以U盘为例,会写“256M”,这个指的是容量,意思是它可以存放256M个字节的这么长数字。其中M是一个数学单位,是英文的“百万”million的缩写,256M就是256x1,000,000个字节的数字。除了M,我们还常见到K,G,T等缩写,K是kilo,也就是“千”的意思,1000K=1M,G是1000个M,T是1000个G。现在好多硬盘的容量都有几个T,对比最早的40M容量的硬盘,大了几百万倍。说回U盘,我们常会以容量来表示他的特性,但是其实还有一个速度的指标。在U盘上我们细心点看标签,有些会写上“USB2.0”或“USB3.0”,这个就是表示速度的指标。

USB2.0标准,表示电脑可以以每秒30M个字节的速度,与U盘传输数据。标准越高,传输的速度越快,我们需要等待往U盘读写文件的哦时间就越短。硬盘、内存和U盘类似,都有一个容量的指标和速度的指标。另外一些硬件如网卡,指标主要就是速度,如100Mbit/S,意思就是网卡每秒能传输10x1,000,000个位(不是字节)。有趣的是,显示卡的主要指标往往是容量,因为卡上的显示内存越大,显示的速度就越快,现在带有几个G bytes的显卡很常见。最后说说CPU,一般我们认为CPU只有速度指标,如33MHz,就是每秒运算33x1,000,000次。其实CPU也有容量,我们现在有32位CPU,还有64位CPU,早期的CPU还有8位,16位的,这个“位”数就是指,每次预算能处理多长容量的数字。8位二进制最大就是0~255,如果程序要计算大于255的整数,就需要多次运算。早期16位游戏机里,常常用65535作为一个数的最大值,比如杀死最终BOSS获得经验值就是65535点,这样设计可以最好的利用其16位CPU;但是现在大部分32位、64位CPU的电脑里,计算65535还是655350都只需要一个计算周期,就没必要把数字限制到65535以内了。(当然以前的游戏缩小数字范围还有考虑减少卡带容量的因素)除了CPU的“位”数,CPU往往还带有二级缓存、三级缓存,这些缓存就是存放数据的临时空间,越大越有利于速度提高,所以CPU指标上也有这些缓存的容量指标。

1.2.2 1M有多大

刚刚我们提到了K\M\G\T这些缩写,但是这些字眼并不能给我们直观的认识——这些数据说代表的规模。我们可以先以文字来看,每1M字节的容量能存放1百万字的英文文章,这里的“字”是字母而非单词。对于中文来说,一般需要两个字节来表达一个汉字,所以1M Byte能存放五十万字的汉语文章。《水浒传》大概五十六万字,在电脑里,一张薄薄的软盘就可以放下了。如果你用光盘(CD-ROM),一般的光盘都有700M Bytes的容量,可以存放50万x700,大概三亿五千万字的文章,而《永乐大典》的字数也只有3.7亿字而已。《四库全书》号称世界上字数最多的书,大概有10亿个汉字,4张普通光盘,或者一张DVD基本就能装下。你看,1M是不是很“大”?

但是,如果你用1M空间存放图片,就会发现1M太小了,因为一张彩色照片,假如是1024X768个点组成(这个分辨率是老式显示器的),而每个点按256种颜色来绘制(256色几乎是卡通画的色彩才能这么少),那么一张照片就会占用1024x768x256个字节,大概2.4M,1M空间连一张质量很差的照片都放不下。所以,数据容量的大小不是绝对的,而是看说存放的内容来顶顶哦。事实上,1M空间是可以存放更多的内容的,办法就是针对存放的数据,使用不同的“数字魔法”——压缩算法,从而使同样的1M空间,可以存放五百万字的文章,或者十张彩色图片,又或者1分钟的音乐。节省空间的压缩,要付出CPU计算时间为代价,这就是计算机世界的时空交换原则:你要节省空间,就要付出时间,反之亦然。程序中的所有优化,在相同硬件的情况下,一般都是按使用需求灵活平衡时间和空间而得到的结果。下一章,我们就会讨论可以让数字信息进行时空变化的方法——各种有用的算法。

[3.5寸软盘]

[50万字的书]

[1024x768的图片2M容量]

感谢大家的阅读,如觉得此文对你有那么一丁点的作用,麻烦动动手指转发或分享至朋友圈。如有不同意见,欢迎后台留言探讨。

原文发布于微信公众号 - 韩大(handa1740168)

原文发表时间:2016-02-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据钻研

JavaScript 世界万物诞生记

一. 无中生有 起初,什么都没有。 造物主说:没有东西本身也是一种东西啊,于是就有了null: ? 现在我们要造点儿东西出来。但是没有原料怎么办? 有一个声音说...

3108
来自专栏IT派

Python学习路线图

Python上手很容易, 基本有其他语言编程经验的人可以在1周内学会Python最基本的内容.

1850
来自专栏怀英的自我修炼

Java漫谈12

上周聊完了Java中的String这种类型,这周我想聊聊Java中的集装箱——集合。当然,这篇也是Java基础漫谈系列的最后一篇文章。不过可能你会说不对啊,Ja...

34511
来自专栏IT派

人民日报整版报道区块链,我只想知道用什么语言开发?

IT派 - {技术青年圈} 持续关注互联网、区块链、人工智能领域 2月26日,《人民日报》经济版头条整版刊发了区块链署名评论文章《三问区块链》《抓住区块链这...

7756
来自专栏我杨某人的青春满是悔恨

漫谈面向对象

这年头但凡是写过几行代码的,想必都不会对面向对象(Object-Oriented, OO)这四个字感到陌生。但什么才是面向对象,不知道又有多少人真正去思考过。有...

937
来自专栏小樱的经验随笔

BZOJ 2748: [HAOI2012]音量调节【二维dp,枚举】

2748: [HAOI2012]音量调节 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 2010  Solve...

2543
来自专栏CSDN技术头条

代码审查拯救世界?

代码审查是指阅读代码来检查源代码与编码标准的符合性以及代码质量的活动。现在,越来越多的团队倡导要进行代码审查活动,而本文作者通过一幅漫画,来诠释其对代码审查的理...

1886
来自专栏逸鹏说道

重温数据结构系列随笔:数据结构的基本概念

现在项目已经踏上正轨,有不少时间可以用来学习,昨晚发现柜子里那本大学时候啃过无数遍的(数据结构 C语言版),那真的无限感叹啊,初恋女友啊,大学回忆啊都涌上心头。...

2604
来自专栏编程

老丁独家!前方高能,与“程序崩溃”的第一次邂逅!

本阶段课程适合2年级以上刚开始接触EV3机器人的同学们。 本篇请下载 LEGO Mindstorms教育版软件 有条件的话,请为孩子添置一套EV3套装,让课程内...

1639
来自专栏诸葛青云的专栏

系统学习C语言方法大全

很多人对学习C语言感到无从下手,经常问我同一个问题:究竟怎样学习C语言?我是一个高级编程师,已经开发了很多年的程序,和很多刚刚起步的人一样,学习的第一个计算机语...

30

扫描关注云+社区