回覆列表
  • 1 # 使用者1721854129371

    ASCII需要編碼多於64個字元,早期制定標準的時候,有個設想是使用6位來編碼字元。新增一些特殊的切換字元,當碰到切換字元時,就切換上下文內容,這樣就可以使用6位來編碼多於64個字元,更加緊湊。但是這樣進行進行傳輸時,假如切換字元被損壞,就引起後續的一連串字元不可讀。最終ASCII選擇了7位來編碼,8位來傳輸,因為8位可以表示兩個BCD編碼的十進位制數字,並且字元編碼使用了7位,剩下的1位可以作為奇偶驗證。

    ASCII的字元順序並非隨便排的,有一定規則。計算機是二進位制編碼,我們將每32個字元作為一個組來看。對計算機來說,32是個整數。

    十進位制00為, 000 0000 十進位制31為, 001 1111 十進位制127為, 111 1111

    這樣控制字元在兩邊,顯示字元在中間。另外注意到高位的數字為1,並且不是111 1111,就是可顯示的。這樣可以快速地將字元分類。

    在ASCII編碼制定前,已經有一些6位大寫字元編碼了(這些編碼方案並沒有小寫字母),其中有種方案叫DEC SIXBIT。下圖是DEC SIXBIT的編碼表,

    接下來的ASCII編碼的兩個組,也就是64個字元編碼。其實就是DEC SIXBIT的排列順序,這樣ASCII編碼就就很容易跟舊方案相互轉換。因此ASCII的大寫字母,並沒有跟小寫字母排列在一起。

    最後一個組,主要排小寫字母。注意到,小寫字母跟大寫字母,剛好隔開32個位置。這樣的話,小寫字母跟對應的大寫字母二進位制中,只會有1位不同。大小寫字母的轉換也可以很快用位運算來完成。

    刪除鍵編碼為 127,可追溯到打孔機。打孔機的紙帶中,對應位為 0 就不打孔,對應位為 1 就打孔。一卷全新空紙帶上完全沒有孔,自然表示全 0,也就對應於 ASCII 的控制字元 Null。那在打孔機上打錯字元時怎麼辦好呢?紙帶中不能將已打的孔填上,於是當打錯字乾脆將其全部打孔,表示這一個字元被省略或者刪除。全部打孔就是二進位制的 7 個 1,對應十進位制編碼 127。於是刪除鍵編碼為 127。----------------------關於ASCII的編碼,還有些可以說的。

    ASCII編碼其中包含了DEC SIXBIT的完整編碼。而DEC SIXBIT的排列順序,有些地方跟老式打字機有點關係。比如數字上面的標點符號的排列,對應了按shift後數字上的標點。鍵盤佈局經過多年演化,到現在還可以找到點影子,比如1上面是!,3上面是#,4上面是$, 5上面是%。跟現在的鍵盤還是一樣的。

    ASCII編碼整體移動DEC SIXBIT的佈局,將字元0的編碼放在十進位制48的位置,也就對應與二進位制的011 0000,字元1就對應於011 0001, 也方便數字的字元跟數值之間的轉換。

    做遊戲時候有時會將數字做成藝術字,美術人員預先做出一些字元的圖片。通常會是 +,-./0123456789。這個順序是按照ASCII排列的,包含了加減除符號,還有小數點,數字字元,基本夠給程式用了。有時還需要加上×,這時會將,號換成×號。當需要顯示×80時,就傳進字串",80"。

  • 中秋節和大豐收的關聯?
  • 寫一段先概括後描寫小貓的一段話?