計算機編碼

2022-09-12 20:24:20 字數 4521 閱讀 9770

可以先讓學生看,然後再介紹ascii碼

假如我們就已經有這麼一張表了ascii(american standard code for information interchange,美國資訊交換標準**)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,並等同於國際標準iso/iec 646。

由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機裡,也就是大小寫英文本母、數字和一些符號,這個編碼表被稱為ascii編碼,比如大寫字母a的編碼是65,小寫字母z的編碼是122。後128個稱為擴充套件ascii碼。

那現在我們就知道了上面的字母符號和數字對應的表是早就存在的。那麼根據現在有的一些十進位制,我們就可以轉換成二進位制的編碼串。

比如

乙個空格對應的數字是0          翻譯成二進位制就是0(注意字元'0'和整數0是不同的)

乙個對勾√對應的數字是251 翻譯成二進位制就是11111011

提問:假如我們要列印兩個空格乙個對勾 寫作二進位制就應該是 0011111011, 但是問題來了,我們怎麼知道從哪兒到哪兒是乙個字元呢?論斷句的重要性與必要性:

上次在網上看到個新聞,講是個小偷在上海**時高喊道:「我一定要當上海賊王!」

正是由於這些字串長的長,短的短,寫在一起讓我們難以分清每乙個字元的起止位置,所以聰明的人類就想出了乙個解決辦法,既然一共就這255個字元,那最長的也不過是11111111八位,不如我們就把所有的二進位制都轉換成8位的,不足的用0來替換。

這樣一來,剛剛的兩個空格乙個對勾就寫作000000000000000011111011,讀取的時候只要每次讀8個字元就能知道每個字元的二進位制值啦。

在這裡,每一位0或者1所佔的空間單位為bit(位元),這是計算機中最小的表示單位

每8個bit組成乙個字元,這是計算機中最小的儲存單位(畢竟你是沒有辦法儲存半個字元的)orz~

要不要舉例子說單位?就像我們形容長度會有厘公尺、分公尺、公尺之分,在計算機裡也有自己的計量資料大小的單位

人民幣的例子:給了你好多錢,假如沒有萬-十萬

bit           位,計算機中最小的表示單位

8bit = 1bytes 位元組,最小的儲存單位,1bytes縮寫為1b

1kb=1024b

1mb=1024kb

1gb=1024mb

1tb=1024gb

1pb=1024tb

1eb=1024pb

1zb=1024eb

1yb=1024zb

1bb=1024yb

提問:學完ascii碼,作為乙個英文程式設計師來說,基本圓滿了。但是作為乙個中國程式設計師,你是不是覺得少了點兒什麼?(再給學生看一下ascii碼表)

顯然,對於我們來說能在計算機中顯示中文字元是至關重要的,然而剛學習的ascii表裡連乙個偏旁部首也沒有。所以我們還需要一張關於中文和數字對應的關係表。之前我們已經看到了,乙個位元組只能最多表示256個字元,要處理中文顯然乙個位元組是不夠的,所以我們需要採用兩個位元組來表示,而且還不能和ascii編碼衝突,所以,中國制定了gb2312編碼,用來把中文編進去。

你可以想得到的是,全世界有上百種語言,日本把日文編到shift_jis裡,南韓把韓文編到euc-kr裡,

各國有各國的標準,就會不可避免地出現衝突,結果就是,在多語言混合的文字中,顯示出來會有亂碼。

因此,unicode應運而生。unicode把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。

unicode標準也在不斷發展,但最常用的是用兩個位元組表示乙個字元(如果要用到非常偏僻的字元,就需要4個位元組)。現代作業系統和大多數程式語言都直接支援unicode

現在,捋一捋ascii編碼和unicode編碼的區別:

ascii編碼是1個位元組,而unicode編碼通常是2個位元組。

字母aascii編碼是十進位制的65,二進位制的01000001

字元0ascii編碼是十進位制的48,二進位制的00110000

漢字「中」已經超出了ascii編碼的範圍,用unicode編碼是十進位制的20013,二進位制的01001110 00101101

你可以猜測,如果把ascii編碼的aunicode編碼,只需要在前面補0就可以,因此,aunicode編碼是00000000 01000001

新的問題又出現了:如果統一成unicode編碼,亂碼問題從此消失了。但是,如果你寫的文字基本上全部是英文的話,用unicode編碼比ascii編碼需要多一倍的儲存空間,在儲存和傳輸上就十分不划算。

所以,本著節約的精神,又出現了把unicode編碼轉化為「可變長編碼」的utf-8編碼。utf-8編碼把乙個unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文本母被編碼成1個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組。如果你要傳輸的文字包含大量英文本元,用utf-8編碼就能節省空間:

字元ascii

unicode

utf-8

a01000001

00000000 01000001

01000001中x

01001110 00101101

11100100 10111000 10101101

從上面的**還可以發現,utf-8編碼有乙個額外的好處,就是ascii編碼實際上可以被看成是utf-8編碼的一部分,所以,大量只支援ascii編碼的歷史遺留軟體可以在utf-8編碼下繼續工作。

搞清楚了asciiunicodeutf-8的關係,我們就可以總結一下現在計算機系統通用的字元編碼工作方式:

在計算機記憶體中,統一使用unicode編碼,當需要儲存到硬碟或者需要傳輸的時候,就轉換為utf-8編碼。

用記事本編輯的時候,從檔案讀取的utf-8字元被轉換為unicode字元到記憶體裡,編輯完成後,儲存的時候再把unicode轉換為utf-8儲存到檔案。

檔案訪問編碼轉換圖

編碼制定時間

作用所佔位元組數

ascii

2023年

表示英語及西歐語言

8bit/1bytes

gb2312

2023年

國家簡體中文字符集,相容ascii

2bytes

unicode

2023年

國際標準組織統一標準字符集

2bytes

gbk2023年

gb2312的擴充套件字符集,支援繁體字,相容gb2312

2bytes

utf-8

2023年

不定長編碼

1-3bytes

計算機編碼 編碼

原碼 a.規則 最高位為符號位,0為正數,1為負數,剩餘位表示資料 b.例 95 原 0101 1111 原 77 原 11001101 原 c.特點 區分正負零 缺陷 0 原 0000 0000 0 原 1000 0000 原碼可能出錯 1 原 1 原 1000 0010 原 2 d d.範圍 8...

計算機編碼

來自 阮一峰 一下對自己有用的精簡部分 1.ascii碼 在計算機內部,所有的資訊最終都表示為乙個二進位制的字串。每乙個二進位制位有0和1兩種狀態,因此八個二進位制位就可以組合出256種狀態,這被稱為乙個位元組 byte 也就是說,乙個位元組一共可以用來表示256種不同的狀態,每乙個狀態對應乙個符號...

計算機編碼

很久很久以前,有一群人,他們決定用8個可以開合的電晶體來組合成不同的狀態,以表示世界上的萬物。他們看到8個開關狀態是好的,於是他們把這稱為 位元組 再後來,他們又做了一些可以處理這些位元組的機器,機器開動了,可以用位元組來組合出很多狀態,狀態開始變來變去。他們看到這樣是好的,於是它們就這機器稱為 計...