十进制一直是我心中过不去的一道坎。。
人类社会使用十进制已经几十万年的历史了,追根到底它源于远古智人的手指计数:当十只手指记不下时就会找其他记号标记一个“十”,接着从1开始再次用手指记录,以此循环。当十根可爱的手指头在眼前不停晃动,重复最末位的计数,人们也慢慢习惯上了这种进位方式,代代相传。
可不幸的是,现代计算机和二进制密不可分。无论是内存地址,硬盘数据,总线信号还是无线电磁波,都遵循着二进制排列组合的规则。因为种种原因,两级对立的普遍性和稳定性存在于这个物质世界的许多地方:晶体管的开与关(内存),电磁的正与负(机械硬盘),电信号的有与无(数据线),波频的高与低(无线网络)。
十进制与二进制相距甚远,且不是次方关系,这直接造成了许多问题,首当其冲的就是:符号匮乏的二进制想要表示一个文件需要排列组合很长很长一串,最重要的是十进制二进制之间的转换比较麻烦。
随着大脑进化,人类早就脱离了用手指来记10以下的数量,直接大脑缓存即可,事实上人脑可以轻松驾驭远大于10的进制计算。只是基因和社会化的缘故,导致我们仍然依赖于十进制。
这些窘境该如何解决呢?在这里有一个“不成熟”的方案蓝图:不改变计算机而去改变人类自己,让人类使用16进制!
正如之前所说,两极性的普遍实用让二进制和十进制“相爱相杀”,因为两极之间的稳定性和快速切换性无处不在,就像语言学中“正反大小高低强弱”这些普遍支持的衡量概念。计算机历史上曾经有人想挑战这一“盛世哲学”但均无功而返:第一代美国军用计算机利用高能耗的电子管cpu试图实现十进制计算来与人类同步;俄罗斯曾经提出的三进制创想最终化为泡沫。对计算机进制的争议最终还是收敛到无可比拟的二进制。
为什么人类使用16进制会更好呢?这里有两点原因,第一点原因是为了适应计算机。
先来说下计算器核心部件的工作逻辑:
当你从输入设备上依次写入十进制数的每一位之后(注意此时内存中是一个用二进制表示每一位的十进制数),cpu通过算法将它们转化成一个完整的二进制数(通常分配一个4字节的空间用于存储)。之后就开始了二进制数之间的数值运算,也就是经典的逻辑运算实现加减法,加减组成乘除,算出结果后再通过一个二转十进制的算法输出。
在这个过程中,十与二进制之间的转换计算所消耗的时间要远大于单纯的两个数之间的四则运算,这就是存在的“不合理”之处。
为解决这个矛盾,聪明的程序猿们提出了模拟竖式计算的“十进制算法”,这种办法直接绕过了数制转换。在内存或缓存中,数是直接以十进制的形式存放的,最终通过每一位十进制数字之间的二进制计算,同时模仿十进制的进位规则,最终得到的结果自然也是十进制的。这种算法还突破了4Byte存储的限制,让计算更灵活。
But,仿竖式计算的致命缺陷仍然在存储上,因为至少要用一个字节来存储位数字,可惜一个字节可以表示256个不同数字,运用在十进制上面显然很浪费,即使只用4个比特也也会损失一半以上的资源浪费。可想而知,这种算法只适用于“连续计算但不连续输出”的情况,存储时还得转成二进制,再加上浮点数的负数的限制让这种算法难以大规模使用。
说来说去,矛盾的核心还是停留在进制的转换问题上。这时请调用我们灵活的大脑,发挥想象,顺便回到主题“16进制”。众所周知2进制转16进制是相当简便与直接的:一个16进制数字与4位二进制数一一对应,即实现了空间充分利用又大大降低了转换的成本,直接加快了OSI参考模型中“应用层”的执行速度,简直是完美。如果人类从一开始就使用十六进制生活工作,到20世纪伊始又邂逅了可爱的图灵计算机,那么此时的我们将多么受益啊!
还有,人类最好使用16进制的第二点原因是:有助于人类自己。十进制对于我们的大脑的计算和记忆能力来说过于简单容易了,16进制更丰富的表示能力可以让人们的生活潜移默化地趋向多样化,渗透到我们的语言和文化的种种方面,激发大脑的智力,提升大脑的思考。虽然听起来很抽象,却是个不争的事实,只可惜人类进化史让我们没能长处8根指头,不然这个世界会是个全新的面貌哦。
所以请容许我提出一个目前看似无法实现的梦想,就是“全民改用16进制”。此愿望若是成真,将是多么大的一个进步啊。可见社会固化并不全是好处,正确的变革还是由少数人完成的哈,也许未来会有越来越多人意识到这一条可持续发展的新方向。