人机交互,十进制和二进制的对话,捎带认清八进制(女友)和十六进制(我)的本质。

来源:互联网 发布:red hat linux 6.0 编辑:程序博客网 时间:2024/06/11 10:00

        用屁股想也能猜到人类使用十进制大概是和双手有10个指头有关吧,那么进制又是什么呢?想象一下人类最初是怎么计数的,比如家里养了一群羊,每天都想数一下,睡觉前也在心里数一下就安心睡着了吧。一个手指代表一只,两个代表两只,自然十个指头就被分配作为了10种标记,代表了1,2,3,4,5,6,7,8,9,10,虽然那时候没有什么阿拉伯数字,但是意思显然是一样的。但是问题来了要是养的羊不断繁殖大于10只后该怎么计数呢?总不能让指头也进化出交配繁殖的功能吧?于是想到了分组,把计数的单位变一下,少的用只,多的用组,多少的界限刚好是10只,这里已经有点个十百千万的感觉了。再回到数羊的故事里来吧,自己数完了10个指头后把他们圈为一组,然后让老婆竖起一只指头代表一组羊,这才好腾出自己的手来继续数下一组羊啊,这不就是在进位吗,以十为单位的进位不就是所谓的十进制吗?明白了这个道理后,在数到100只羊时自然就得再把隔壁老王也拉进来帮忙数羊了,当然老王的一个指头可代表的是10个组,共计100只的羊,也给取个名字吧,就叫组的组,不难想象随着羊群的繁殖以后还会有“组的组的组”,等等,这好像有点拧巴,干脆给单位也取个简单好记名字才好,个十百千万十万百万千万亿就诞生了,因为羊群估计不会太大,老祖宗定的单位够用了,亿已经是我知道的最大的数字单位了,貌似中学学过后面还有一些更大的单位,但现阶段普通青年的认知水平到亿就够用了,比如说人有钱,爸爸年代是叫万元户,毕业时叫百万富翁,随着楼市的爆发式增长现在已经叫亿万富翁了。自然而然我们拥有了十进制计数的能力。

        当我们发明计算机的时候由于使用逻辑电路(或者是机械继电器的开关)实现的逻辑运算功能,用电平的高低来代表0,1也是很自然的事情,不过也听说过当时俄国人有做过3进制的计算机,估计可能是想利用电路的高阻状态再多保存一位的计数能力吧,这样就比美国人的0,1高了那么一个2出来。不过历史证明做小三是没有好下场的,最终美国人的二进制计算机统一了天下。由于有了先前十进制的经验,计数对于计算机来说自然也是扩展位数,逢二进一的老套路了,但是因为它发明的太晚了,所以没能给它的每一位都分配个单位,没有二进制的个十百千万了,不过倒是模仿十进制的千,兆,定义自己的K,M,G,但是1K=1024,1M=1024×1024,即按照2的10次方为一个台阶定义了二进制中常用的单位,为什么是每10个二进制的位才定义一个单位呢,这自然也是人类习惯使用十进制的证明啊,另外有趣的是2的10次方等于1024,这个数非常接近1000,即10的3次方,生活中人们为了记住一长串10进制的数字,比如电话号码,也是常常采用分组的方式,比如3个一组。我发现自己的女友在电话里报号码时常常3个一组的报一串数字,当时我就震惊了,老子可是4个一组的报啊,难道说她的内存比我的小一位?计算机也有这毛病,不管是32位的还是64位的都喜欢8个2进制的为一组,编个地址,也许是历史原因造成的吧,INTEL早先的CPU 8008就是八位的,别问我4004还是4位的之类的问题,再问我也解释不了了。以后的16位8086为了兼容性估计也采用了8位一组进行编址。但这产生了一个蛋疼的问题是当介绍什么CPU的小端模式(INTEL采用)和大端模式(MOTORORA采用)时,八卦一下,说起MOTO的芯片后来被拆分出去成立了Freescale公司,前段时间居然被NXP给收购了,至此感觉Intel和Moto的恩怨算是了结了。 继续说大小端模式的事儿,说什么小端模式的字节序是数字的低字节保存在低位地址,高位保存在高地址,比如0x12345678存储时就被保存为0x78 0x56 0x34 0x12,而大端模式相反就保存为0x12 0x34 0x56 0x78,可是要是从2进制的表示来看为什么单个字节中的位序却不分什么大小端模式了?比如一个字节0x12,二进制就是0b00010010,怎不小端模式不保存为0b01001000,即0x48了,原因一般被解释为计算机是按字节编址的,大小端模式正是因为多个字节的数据占据多个地址导致的字节序可选择为正序或逆序,而单个字节的地址都特么一样的,还分什么字节序啊。是啊,可我说的是位序,计算机不是二进制的吗?为什么INTEL和MOTO搞个字节序不同出来,位序怎么就商量好一致了?也可以设计为不同嘛!呵呵!

        最后,有趣的是八进制和十六进制在计算机中往往只是用于助记那么一长串的二进制数字而已,就像我女友喜欢3个一组(八进制),而我喜欢4个一组(16进制)一样。

0 0
原创粉丝点击