目录
0.0、出去玩了两天
出去玩了两天,没有写文章。所谓“读万卷书,行万里路”。其实每个人都无法看遍完整的世界,而在世界各处区别甚至比你和爸的代沟还大。这才使得商人有了用武之地——倒卖东边和西边的差异。东西东西就是这么来的,这让我联想到人是不是东西的观点分歧。东西和人皆为信息的表示,但对他们的理解不同就会产生分歧。就如同计算机中不同的表示有不同的行为方式,只有对他们的清晰解释,才能防止计算机中的分歧。今天我们就开始对计算机系统中的信息的表示和处理进行学习吧。
2.0、信息的表示和处理
人为什习惯用十进制?因为人有十个手指头。计算机为什么用二进制,因为电压有高低。电子计算机的祖先,珠算就更接近于人的思维,上二下五,就像人有两只手,每只手五根手指头。可是到了电子计算机的场景,无论是五还是十都不便于存储和操作。而且十进制也只是人类当前最习惯使用的进制,而非绝对进制。在中国古代就存在过“半斤八两”的十六进制时期。所以要用什么进制,完全取决于使用环境。说白了还是为了省钱,二进制的珠算会用掉更多的珠子。能使用二进制的珠算的帐房先生更稀有,必然更贵。但是在电子计算机的世界里就不是这样了。十进制的电子电路非常复杂,会产生巨额生产成本。且符合人类使用的十进制表示,是可以由抽象来实现的。虽然开发抽象很贵,但是抽象复用却很便宜,只要复用得够多,就可以稀释掉开发抽象的成本。而在如今电子设备横行的时代,复用抽象约等于无穷大,所以开发抽象的成本相当于无限趋近于零。所以,贵贱之分大家因该是能体会到了。正如上一章的概述小结所说,我们要做“大牛”。也就是要做贵的人,就是要做开发抽象的人。所以,我们需要学习被抽象的事物的特性和对其抽象的方法。
那么一个二进制系统又可以被抽象成哪些信息呢?文中提到了有非负数、字符码、负数、实数近似值。字符码前面章节已经介绍过了,就是ASCII码相关的内容。而剩下的三种抽象分别需要用到下述三种数字表示法:
无符号(unsgined)编码——非负数相关;
补码(two's-complement)编码——负数相关;
浮点数(floating-point)编码——实数近似值相关;
计算机将利用这些数字表示法进行计算。当然,这些表示法只能表达有限的数字,也是我们常说的取值范围。计算结果超出了它的取值范围,就会发生溢出。比如使用Int32来计算表达式
200 * 300 * 400 * 500
会得到 -884 901 888,的结果。很显然,正数相乘是不会得到负数的。这是因为,该运算结果的值溢出后,计算机舍弃了溢出高位,而整数类型的第一位是符号位,这样正负就由未溢出的第一位决定了。
而浮点运算乘法时溢出不会出现符号错误,而是会出现+∞。由于其表示的是实数的近似值,所以浮点数运算不可结合。比如,
(3.14 + 1e20)- 1e20 得 0.0
而
3.14 + (1e20- 1e20) 得 3.14
因为,1e20已经溢出了,被认为是+∞,而3.14 + (+∞),任然是+∞。但是(+∞) - (+∞)却等于0。所以在浮点数的运用中,要特别主注意它的近似值特点。记得我在学习游戏开发的时候,老师就告诉我,在做浮点数运输算结果判断时,一定要判断一个范围,而不是一个精确值。至于这个原因嘛,这里没有讲到,但是后面内容一定会讲到,现在我只能算是只知其一,不知其二,但是到后面学习了相关原理后一定会融会贯通的。
今天就到这吧,好热,37度,体感40度。为什么不开空调,别问,问就是没钱。其实钱也是一种抽象,你想想,世皆人爱钱,爱的是钱本身吗?不是吧,其实爱得是钱所能换取的东西。钱可以换取生活空间,可以换成电量,可以换成水和食物。但是它换不了我高傲的心,我可以没有生活空间,我可以没有电量,我也可以没有水和食物,但是我绝对不会像金钱低头。没有生活空间我可以开荒,没有电量我可以做发电机,没有水和食物我可以打井种地,不要跟我说什么非法采矿,我这是紧急避险。