ASCII碼的一段歷史

    最近在慢慢的看一些guava的源代碼,發現一段跟ascii相關的代碼,結合一段歷史來看很有意思。

    guava代碼中有Ascii這個類,定義了Ascii中部分字符的常量,目的嘛。。都是byte的常量,難道是省空間,Orz。直接說重點,裏面定義touppercase和tolowercase方法,指明只對ascii碼中的大小寫進行轉換,其實也就是對英文字母的轉換,這與String裏的方法是有區別的,因爲String裏面的case轉換是基於unicode字符集的,顯然大部分情況下,我們只需要對英文字母做大小寫的轉換,於是String toxxcase裏面的一大坨代碼需要考慮的locale,對不同字符的大小寫轉換碼錶,大量的位運算,還有很多判斷邏輯都是浮雲,代碼很多餘。Ascii裏的代碼很簡單,只是使用位運算來處理英文字母的大小寫轉換,因爲大小寫相差剛剛32,unicode碼裏面有各種字符之間轉換的碼錶,而ascii轉換碼錶很簡單,+-32即可,所以使用0x5f和0x20來做位運算就可以進行轉換了,一個小的改進帶來的價值有多大。。如果你有幾百臺機器在做大小寫不敏感的字符串匹配和分析,這個改進的價值幾何呢?我不清楚,也許google能給個答案。

    32,這個數字很湊巧,剛好可以使用位運算來對大小寫進行轉換,其實是在1963年一次投票後Ascii碼中大小寫才改進爲相差32:

The X3.2.4 task group voted its approval for the change to ASCII at its May 1963 meeting.Locating the lowercase letters in columns 6 and 7 caused the characters to differ in bit pattern from the upper case by a single bit, which simplified case-insensitive character matching and the construction of keyboards and printers.

  很多時候我們需要了解更多的計算機發展歷史才能明白更多東西,只是我們有多少時間專門來做這件事呢,還得平時多留心啊!

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章