字符在计算机中是如何表示的?
如果計算機(jī)只存儲二進(jìn)制數(shù)據(jù),那么它如何表示字符呢?計算機(jī)使用的是字符集,將字符映射為整數(shù)。早期,字符集只用 8 位表示。即使是現(xiàn)在,在字符模式(如 MS-DOS)下運行時,IBM 兼容微機(jī)使用的還是 ASCII(讀為“askey”)字符集。
?
ASCII 是美國標(biāo)準(zhǔn)信息交換碼(AmeTican Standard Code for Information Interchange)的首字母縮寫。在 ASCII 中,每個字符都被分配了一個獨一無二的 7 位整數(shù)。
由于 ASCII 只用字節(jié)中的低 7 位,因此最高位在不同計算機(jī)上被用于創(chuàng)建其專有字符集。比如,IBM 兼容微機(jī)就用數(shù)值 128?255 來表示圖形符號和希臘字符。
ANSI 字符集
美國國家標(biāo)準(zhǔn)協(xié)會(ANSI)定義了 8 位字符集來表示多達(dá) 256 個字符。前 128 個字符對應(yīng)標(biāo)準(zhǔn)美國鍵盤上的字母和符號。后 128 個字符表示特殊字符,諸如國際字母表、重音符號、貨幣符號和分?jǐn)?shù)。
Microsoft Windows 早期版本使用 ANSI 字符集。
Unicode 標(biāo)準(zhǔn)
當(dāng)前,計算機(jī)必須能表示計算機(jī)軟件中世界上各種各樣的語言。因此,Unicode 被創(chuàng)建出來,用于提供一種定義文字和符號的通用方法。
Unicode 定義了數(shù)字代碼(稱為代碼點(code point)),定義的對象為文字、符號以及所有主要語言中使用的標(biāo)點符號,包括歐洲字母文字、中東的從右到左書寫的文字和很多亞洲文字。代碼點轉(zhuǎn)換為可顯示字符的格式有三種:
- UTF-8 用于 HTML,與 ASCII 有相同的字節(jié)數(shù)值。
- UTF-16 用于節(jié)約使用內(nèi)存與高效訪問字符相互平衡的環(huán)境中。比如,Microsoft Windows 近期版本使用了 UTF-16,其中的每個字符都有一個 16 位的編碼。
- UTF-32 用于不考慮空間,但需要固定寬度字符的環(huán)境中。每個字符都有一個 32 位的編碼。
ASCII 字符串
有一個或多個字符的序列被稱為字符串(string)。更具體地說,一個 ASCII 字符串是保存在內(nèi)存中的,包含了 ASCII 代碼的連續(xù)字節(jié)。比如,字符串“ABC123”的數(shù)字代碼是 41h、42h、43h、31h、32h 和 33h。
以空字節(jié)結(jié)束(null-terminated)的字符串是指,在字符串的結(jié)尾處有一個為 0 的字節(jié)。C 和 C++ 語言使用的是以空字節(jié)結(jié)束的字符串,一些 Windows 操作系統(tǒng)函數(shù)也要求字符串使用這種格式。
使用 ASCII 表
下圖中列出了在 Windows 控制臺模式下運行時使用的 ASCII 碼。
在查找字符的十六進(jìn)制 ASCII 碼時,先沿著表格最上面一行,再找到包含要轉(zhuǎn)換字符的列即可。表格第二行是該十六進(jìn)制數(shù)值的最高位;左起第二列是最低位。
例如,要查找字母 a 的 ASCII 碼,先找到包含該字母的列,在這一列第二行中找到第一個十六進(jìn)制數(shù)字 6。然后,找到包含 a 的行的左起第二列,其數(shù)字為 1。因此,a 的 ASCII 碼是十六進(jìn)制數(shù) 61。
下圖用簡單的形式說明了這個過程:
ASCII 控制字符
0?31 的字符代碼被稱為 ASCII 控制字符。若程序用這些代碼編寫標(biāo)準(zhǔn)輸出(比如 C++ 中),控制字符就會執(zhí)行預(yù)先定義的動作。下表列出了該范圍內(nèi)最常用的字符。
| 8 | 回退符(向左移動一列) | 12 | 換頁符(移動到下一個打印頁) |
| 9 | 水平制表符(向前跳過 n 列) | 13 | 回車符(移動到最左邊的輸出列) |
| 10 | 換行符(移動到下一個輸出行) | 27 | 換碼符 |
數(shù)字?jǐn)?shù)據(jù)表示術(shù)語
用精確的術(shù)語描述內(nèi)存中和顯示屏上的數(shù)字及字符是非常重要的。比如,在內(nèi)存中用單字節(jié)保存十進(jìn)制數(shù) 65,形式為 0100 0001。調(diào)試程序可能會將該字節(jié)顯示為“41”,這個數(shù)字的十六進(jìn)制形式。
如果這個字節(jié)復(fù)制到顯存中,則顯示屏上可能顯示字母“A”,因為在 ASCII 碼中,0100 0001 代表的是字母 A。由于數(shù)字的解釋可以依賴于它的上下文,因此,下面為每個數(shù)據(jù)表示類型分配一個特定的名稱,以便將來的討論更加清晰:
二進(jìn)制整數(shù)是指,以其原始格式保存在內(nèi)存中的整數(shù),以備用于計算。二進(jìn)制整數(shù)保存形式為 8 位的倍數(shù)(如 8、16、32 或 64)。
數(shù)字字符串是一串 ASCII 字符,例如“123”或“65”。這是一種簡單的數(shù)字表示法,下表以十進(jìn)制數(shù) 65 為例,列出了這種表示法能使用的各種形式。
| 二進(jìn)制數(shù)字字符串 | “01000001” | 十六進(jìn)制數(shù)字字符串 | “41” |
| 十進(jìn)制數(shù)字字符串 | “65” | 八進(jìn)制數(shù)字字符串 | “101” ? |
?
?
下一篇:1.11?字符在計算機(jī)中是如何表示的
1.12?匯編語言布爾表達(dá)式
處理器架構(gòu)
2.1?CPU處理器架構(gòu)
2.2?32位x86處理器架構(gòu)
2.3?x86-64處理器架構(gòu)
2.4?x86計算機(jī)組件
匯編語言基礎(chǔ)
3.1?第一個匯編語言程序
3.2?匯編語言常量
3.3?匯編語言保留字
3.4?匯編語言標(biāo)識符
3.5?匯編語言偽指令
總結(jié)
以上是生活随笔為你收集整理的字符在计算机中是如何表示的?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编语言布尔表达式(NOT、AND、OR
- 下一篇: Cobar部署与测试