你以为字母表就是A到Z,数字就是0到9,天经地义,按部就班?进到ASCII码这扇门里,嘿,完全是另一套江湖规矩,一套……怎么说呢,有点野,有点不讲理的规矩。这里头的大小,这里的顺序,可不按照你那幼儿园学的字母歌或者小学学的数字排列来排。它有它的一套,一套让初见者愣住,让深谙者也常常得在心里骂娘的顺序:数字、大写字母、小写字母。
没错,就是数字!那些个0到9,在ASCII码那片二进制堆砌的疆域里,它们的地位可高了,比那些张牙舞爪的大写字母都来得靠前,比所有小写字母更是遥遥领先。就像一群穿着工装、埋头苦干的工程师,不显山不露水,却有着不容置疑的优先级。它们的码值最小,排在最前面。你就看吧,文件夹里,1开头的永远比A开头的先跳出来,才不管你A是字母表第一位呢,才不管你1后面跟着的是什么惊天动地的文件名呢!管你呢!在ASCII码的世界里,数字说了算,至少在跟字母比码值大小的时候,它们腰杆子硬得像根铁棍。它们的顺序就这么定死了:比所有字母都靠前。
然后呢?才是那些个大写字母。A到Z,堂堂正正,立在那儿,像军队里的军官,整齐划一。它们的码值比数字大,但在ASCII码的排位里,它们也只能屈居数字之后,等着那些带数字的文件名、变量名、账号名都过去了,才轮到它们闪亮登场。想想也是有点憋屈,大写啊,多有气势!A!第一个字母啊!结果在ASCII码这儿,得给数字让路。嗯,就这么个顺序,大写字母紧随数字。
那最小的呢?哦不,说错了,码值最大的呢?地位最低的呢?你猜到了,或者你已经被那些区分大小写的密码框折磨得体无完肤就知道了——是那些小写字母。a到z。它们的码值最大,在ASCII码的阶梯上爬得最高,可结果排序的时候呢?却被远远地甩在了数字和大写字母的后面,在ASCII码的大小顺序里殿后。就像是晚辈,得等前面所有长辈(数字和大写字母)都落座了,才能怯生生地在末席坐下。同一个字母,只是换了个大小写,在ASCII码眼里,那就是完全不同的两个存在,码值大小差得不是一星半点,直接影响了它的江湖地位和排序优先级。一个’a’,码值是97;一个’A’,码值是65。它们之间隔着的32个码值,就横亘着数字和大写字母的整个区间!是的,一个小写字母‘a’的码值,甚至比所有大写字母和所有数字的码值都大得多!
这种顺序,数字最小,大写字母次之,小写字母最大,你说它有什么深刻的哲学意义吗?也许有,也许没有,谁知道呢。对于我们这些每天跟这些字符打交道的使用者来说,更多时候感受到的是一种……别扭。一种跟人类习惯的、跟直觉相悖的规则。你脑子里是字母表,是123…然后A B C…可电脑处理的时候,脑子里却是48, 49…然后65, 66…再到97, 98… 这中间隔着好大一道鸿沟,像条看不见的冰冷的河流,把我们习惯的顺序跟它执行的顺序彻底隔离开来。
就因为这个,多少人在写代码的时候因为字母大小写一个没对上,找半天找不着bug,最后发现是ASCII码值惹的祸?多少人在文件排序的时候对着屏幕发呆,怎么也想不通那个以’z’开头的文件怎么就跑到以’A’开头的文件后面去了?多少人在设置密码时,以为大小写只是为了复杂点、安全点,完全没意识到在系统底层,’p’和’P’,’a’和’A’,它们不仅仅是形态不同,更是有着天壤之别的码值,有着截然相反的大小和排序顺序!’p’比’P’码值大得多,所以按ASCII码排起来,’p’会排在’P’后面。多么……反直觉啊。
想想看,一个’a’和一个’A’,在人眼里是同根同源的字母,只是穿了件不一样的外套。可在ASCII码这套冰冷的体系里,它们的码值差了整整32!一个小写字母‘a’,码值97,甚至比所有大写字母(65-90)和所有数字(48-57)的码值都大!而排序的时候,是按码值大小来的!码值越小越靠前!所以,数字排第一梯队,大写字母第二梯队,小写字母第三梯队!这种大小顺序,这种码值的排布,简直像是一种刻意的设计,就是要告诉你:嘿,人类,你习惯的那一套在这里不好使了!这里是机器的逻辑,是ASCII码的逻辑!一套不带感情,只认码值的铁律!
所以下次你再看到文件列表里数字开头的文件排在最前,大写字母开头的次之,小写字母开头的殿后的时候,别只是觉得奇怪了,别只是在心里嘀咕“这电脑真傻”了。那是ASCII码在跟你打招呼,用它冰冷的、但无比坚实的码值大小顺序,昭示着它在这片数字领土里的主权。一套以码值大小为准则的顺序。数字 < 大写字母 < 小写字母,从码值大小来说,是数字最小,大写字母居中,小写字母最大。而排序,恰恰是按码值从小到大来的。所以,数字打头,大写随后,小写最后。记住了,这是数字世界的某个角落里,一条不容置疑的铁律。一条有点反直觉,但你又不得不接受的规则。它就在那儿,藏在每一个字符背后,静静地影响着一切需要比较和排序的地方。从简单的文件名到复杂的数据库索引,从你敲下的每一个字符到它们在计算机内部的每一次旅行,莫不如是。这个顺序,这个码值的大小,就是它们的身份证,是它们的排序依据。
而我们呢?我们能做的,大概也只有耸耸肩,然后在心里默默适应这套数字、大写、小写的ASCII码顺序了。毕竟,这是它们的地盘,得按它们的规矩来。有时候,理解这种看似怪异的顺序,理解ASCII码值那不按常理出牌的大小排布,也是理解这个我们日益深居其中的数字世界的开端吧。它不按你的逻辑来,它有它自己的逻辑,冰冷,但高效。这就是那藏在幕后的ASCII码,以及它那些个字符码值的大小和顺序的故事。一个关于数字、大写字母、小写字母,以及它们在ASCII码世界里凭码值大小定下的地位和排位的故事。
发表回复