計算機編碼

**計算機編碼**指電腦內部代表文字、符號、字母或數字的方式。電子計算機的文數字編碼，是指在計算機硬體軟體中對於文字或數值的內部表示。通常數值會儲存為位元組，而以組成它們的位元數給以名稱。選擇數值和位元模式之間的編碼，可以使計算機的操作便利；計算機處理器指令集所使用的位元編碼，通常需要將其格式再轉換以供外界的使用者來判讀，例如列印和顯示。對於紙筆書寫看似相同的文字符號或數值，在不同類型的電子計算機處理器內部中，可能有不同的約定用於整數和實數。大多數計算都是使用適合處理器暫存器的數碼格式來執行，但是某些軟體系統允許使用多種儲存方式，來表示任意大數。

## 位元、字節、字組位元和無號整數

計算機的基本儲存單位是「位元」，通過開關變化設置表達值 0 或 1。在有兩個位元的情況下可以得到四個不同的狀態：

```
  00   01   10   11
```

如果有三個位，則有八種狀態：

```
  000   001   010   011   100   101   110   111
```

每當增加一個位時，將得到兩倍的狀態。

計算機使用不同數量的位元儲存不同種類的信息。4 個位元被稱為一「nybble」，8 個被稱為一字節，也有 16，32，或更多位元組成的信息計量單位。

一個 nybble 可以為 16 種不同的情況編碼，例如數字 0 到 15。大體上，使用任何序列的排列來表示不同的 16 種狀態是可以的，但在實際的應用通常是這樣的：

```
       0000 = 十进制0           1000 = 十进制8
  0001 = 十进制1           1001 = 十进制9
  0010 = 十进制2           1010 = 十进制10
  0011 = 十进制3           1011 = 十进制11
  0100 = 十进制4           1100 = 十进制12
  0101 = 十进制5           1101 = 十进制13
  0110 = 十进制6           1110 = 十进制14
  0111 = 十进制7           1111 = 十进制15
```

這樣的表示是很自然的，因為它符合我們所熟悉的十進位數表示方法。例如，給定一個十進位數：

　
: 7531

我們很自然地把它理解為：

　
: 7 × 1000 + 5 × 100 + 3 × 10 + 1 × 1

或者，使用 10 的冪來表示：

　
: 7 × 103 + 5 × 102 + 3 × 101 + 1 × 100

注意任何數（除了 0）的 0 次冪都是 1。

數據中的每個數字表示從 0 到 9 的值，這樣我們有 10 個不同的數字，那就是我們把它稱為「十進位」的原因。每個數字可以通過 10 的某次冪來決定它的位置。這聽起來很複雜，但實際上並不是這樣的。這正是當您讀一個數字的使用認為是理所當然的事情，您甚至都不用仔細思考它。

類似地，使用二進位編碼就像上面所說的那樣，值 13 是這樣編碼的：

　
: 1101

每一個位置有兩個數字可以選擇，所以我們稱它為「二進位」。因此，它們的位置是這樣決定的：

　
: 1101 =

　
: 1 × 23 + 1 × 22 + 0 × 21 + 1 × 20 =

　
: 1 × 8 + 1 × 4 + 0 × 2 + 1 × 1 = 13（十進位）

注意這裡使用了 2 的冪：1、2、4 和 8。痴迷於計算機的人通常可以記住 2 的從 2 到 16 次冪，這並不是因為他們的記憶力，而是因為他們大量的使用這些數字：

```
  20  =   1        28  =    256
  21  =   2        29  =    512
  22  =   4        210 =  1,024
  23  =   8        211 =  2,048
  24  =  16        212 =  4,096
  25  =  32        213 =  8,192
  26  =  64        214 = 16,384
  27  = 128        215 = 32,768
               216 = 65,536
```

注意的是，根據公制單位，值 210 = 1,024 通常被提及為「kilo」（千），或簡寫成「K」，所以很多 2 的高次冪通常可以簡寫成：

 

```
  211 =  2 K =  2,048
  212 =  4 K =  4,096
  213 =  8 K =  8,192
  214 = 16 K = 16,384
  215 = 32 K = 32,768
  216 = 64 K = 65,536 
```

同樣的，值 220 = 1,024 x 1,024 = 1,048,576 通常被簡寫成「M」(即兆)：

```
  221 = 2 M
  222 = 4 M
```

而 230 曾被稱為「吉」，或「G」。下面我們將會大量使用這些修飾符號。

有一個很微妙的話題。如果我們使用 16 位，我們可以得到 65,536 種不同的值，但是這些值是從 0 到 65,535 的。人們通常從 1 開始數數，但是計算機是從 0 開始計數的。因為這對它們來說更簡便。這個小問題有時也會使得計算機混淆。

現在，我們得到了計算位的方法：

* 您只能在您所有的位的範圍內進行算術操作。也即是說，如果您正在使用的是 16 位，那您不能對 65,535 或更大的數據進行操作，否則您將得到一個「數據溢出」的錯誤。這個術語表明，您正在進行的是「有限精度」的操作。
* 使用這種編碼不能表示小數。您只能使用非小數的「整數」。
* 使用這種編碼不能表示負數。所有的數字都是「無符號數」。

雖然有這種限制，但是在計算機中對於簡單的增 1 計數來說，「無符號整數」還是十分有用的。它們對計算機來說是很容易處理的。通常計算機使用 16 位或 32 位無符號整數，通常被稱為「整數（integer）」或「長整數（long integer）」。一個整數允許對從 0 到 65,535 的數據進行操作，而一個長整型允許對從 0 到 4,294,967,295 的數進行操作。

## 八進位和十六進位數

現在讓我們討論一些偏外的話題：對二進位數字的表示方法。計算機通常使用二進位來表達數據，但是在實際中如果使用像這樣的二進位：

　
: 1001 0011 0101 0001

那將是一件痛苦的事，並且很容易出錯。通常計算機使用一個基於二進位的表達方式：八進位，或更通常使用的，十六進位。

這一件聽起來挺狡猾但實際上又很簡單的事。如果不是這樣的話，我們就不會這樣使用了。在平常的十進位體系中，我們有 10 數字（0 到 9）按以下方式構成排列：

　
: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

在八進位中，我們只有八個數字（0 到 7）按以下方式構成排列：

　
: 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 ...

也即是說，八進位的「10」相當於十進位的「8」，八進位的「20」相當於十進位的「16」，以此類推。

在十六進位中，我們只有十六個數字（0 到 9，然後是從 a 到 f）按以下方式構成排列：

　
: 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 ...

也即是說，十六進位的「10」相當於十進位的「16」，十六進位的「20」相當於十進位的「32」。

這些表示數值的方法都是表位置的系統，但是它們使用的不是像十進位那樣的 10，而是分別使用 8 和 16。例如：

　
: 八進位 756

　
: = 7 × 82 + 5 × 81 + 6 × 80

　
: = 7 × 64 + 5 × 8 + 6 × 1

　
: = 448 + 40 + 6 = 十進位 494

　
: 十六進位 3b2

　
: = 3 × 162 + 11 × 161 + 2 × 160

　
: = 3 × 256 + 11 × 16 + 2 × 1

　
: = 768 + 176 + 2 = 十進位 946

好了，如果您還不是那麼明白，不用擔心。我們想說明的是，對於八進位來說，他們剛好和 3 位二進位有一個完美的對應關係：

　
: 000 = 八進位 0

　
: 001 = 八進位 1

　
: 010 = 八進位 2

　
: 011 = 八進位 3

　
: 100 = 八進位 4

　
: 101 = 八進位 5

　
: 110 = 八進位 6

　
: 111 = 八進位 7

類似的，一個十六進位數剛好和一個 4 位的二進位數對應。

```
  0000 = 十六进制0       1000 = 十六进制8
  0001 = 十六进制1       1001 = 十六进制9
  0010 = 十六进制2       1010 = 十六进制a
  0011 = 十六进制3       1011 = 十六进制b
  0100 = 十六进制4       1100 = 十六进制c
  0101 = 十六进制5       1101 = 十六进制d
  0110 = 十六进制6       1110 = 十六进制e
  0111 = 十六进制7       1111 = 十六进制f
```

因此，把一個很長的二進位數轉換成一個八進位就變得很簡便，例如：把二進位 1001001101010001 轉化成八進位：

```
  1 001 001 101 010 001 二进制 = 111521 八进制
```

轉換成十六進位會更簡單：

```
  1001 0011 0101 0001 = 9351 十六进制
```

但是要把它轉換成十進位（37,713）就比較麻煩了。八進位和十六進位使得轉換二進位機器級的數字變得簡單方便。

## 有符號整數和補碼

在定義了無符號二進位數後，我們就要著手定義負數了，或稱為「有符號整數」。最簡單的一個方法是保留一個位來表示數值的符號。這個「符號位」可以位於數值的最左邊，當然也可以位於數值的最右邊。如果這個符號位為 0，表示數值是正的，如果這個符號位為 1，表示數值是負的。

 
這樣做是可以的，雖然從人類的角度來看是最明顯的解決方案，但是它對於計算機來說有可能帶來一些難度。例如，這種編碼使得 0 可以有正負兩種。人們可能對此感到不可思議，但是這對計算機來說是適應的。

對計算機來說，更自然的表達方式是對給定的位數的二進位數按其範圍分成兩半，其中前一半用來表示負數。例如，在 4 位數值中，你可以得到：

```
  0000 = 十进制0
  0001 = 十进制1
  0010 = 十进制2
  0011 = 十进制3
  0100 = 十进制4
  0101 = 十进制5
  0110 = 十进制6
  0111 = 十进制7
  1000 = 十进制-8
  1001 = 十进制-7
  1010 = 十进制-6
  1011 = 十进制-5
  1100 = 十进制-4
  1101 = 十进制-3
  1110 = 十进制-2
  1111 = 十进制-1
```

現在我們得到了一個「有符號整數」數字系統，使用所知道的，為了一些不是很重要的原因，「補碼」編碼方式。對 16 位有符號數字編碼來說，我們可以得到範圍為 - 32,768 到 32,767 的有符號數字。對一個 32 位的有符號編碼系統來說，我們可以為從 - 2,147,483,648 到 2,147,483,647 的數編碼。

與只改變符號位來表示負數的編碼方式相比，「補碼」編碼方式與之有所不同。例如對於 - 5 來說，只對符號位編碼，應該是：

```
  1101
```

但是對於「補碼」編碼方式來說，則是：

```
  1011
```

這對於符號編碼來說是 - 3。關於為什麼計算機要使用補碼這種編碼方式我們會在後面解釋。

所以，現在我們可以以二進位方式來表示正負兩種不同的數值。請記住對於一個二進位數來說，只有兩種解釋方式。如果在內存中有一個這樣的二進位數值：

```
  1101
```

-- 這只能解釋為十進位的「13」或「-5」。

## 定點小數

這種格式通常被用於商業計算（例如在電子表格或 COBOL 中）；因為在這裡，丟棄小數位來記錄金錢是不能接受的。因此了解二進位如何存貯小數是十分有用的。

首先去我們必須決定要用多少位來存貯小數部分和多少位來存儲整數部分。假設我們使用 32 位來表示這種格式，那麼我們用 16 位表示整數部分，16 位來表示小數部分。

小數部分怎麼使用呢？這沿用了表示整數的方式：如果 8 位接下來是 4 位，是 2 位，1 位，那麼當然接下來就是半位，1/4 位和 1/8 位等等了。

例如：

```
                             整数位            小数位
   0.5      =    1/2 = 00000000 00000000.10000000 00000000
   1.25     =  1 1/4 = 00000000 00000001.01000000 00000000
   7.375    =  7 3/8 = 00000000 00000111.01100000 00000000
```

有一點棘手的是，如果您要表達 1/5（十進位的 0.2），那您不能得到精確的數值表達方式。最好的方法只能是：

　
: 13107/65536 = 00000000 00000000.00110011 00110011 = 0.1999969... 十進位

　
: 13108/65536 = 00000000 00000000.00110011 00110100 = 0.2000122... 十進位

然而不，您不能這樣做，即使您有更多的數位來表達。問題是，一些小數使用二進位的方式不能精確地表達出來。除非您使用一個特殊的辦法。這個特殊的辦法是分別使用兩個數字來表達小數：一個是分子，一個是分母。然後您可以使用學校學習的加、減、乘、除來得到它們。然而，這些方法不能表達更高級的數字（例如平方根），或者如果這兩個分母的最小公倍數很大的話，那就難以使用。這就是使用定點小數表達小數的缺點。

## 浮點小數

當我們使用了有符號和無符號的數值表達方式時。如果遇到連 32 位也不足以表達的大範圍的數，或也許可以表達，但我們必須為此放棄小數位時，我們可以選擇的以獲得更大範圍的數值的表達方式的方法是使用「浮點小數」格式而拋棄「定點小數」格式。

在十進位中，我們對以下的表達方式很熟悉：

　
: 1.1030402 × 105 = 1.1030402 × 100000 = 110304.02

或簡寫成：

```
  1.1030402E5
```

這表示「1.103402 乘以一個 1 後面跟著 5 個零的數」。我們可以得到一個確定的稱謂「尾數」的數值（1.1030402），乘以一個 10 的某個冪級數 (E5，表示 105 或 100,000），也就是「冪級數」。如果我們使用一個負的冪級數，那就意味著乘以該正級數的倒數。例如：

　
: 2.3434E-6 = 2.3434 × 10-6 = 2.3434 × 0.000001 = 0.0000023434

使用這種定義的好處是我們可以得到更大範圍的數值，雖然尾數部分的精確度受到影響。相似的原理可以應用於二進位中為計算機使用。人們設計了很多方式，但是作常用的是由美國電器和電子工程師協會定義的一種方法。它對 64 位浮點格式的定義是：

* 11 位二進位表示指數，使用「超 1023」格式。這種格式使得指數可以表示為 0 到 2047 的無符號數，但是在得到真實值前必須先減去 1023；
* 52 位尾數，使用無符號數字表示；
* 一個符號位；

下面我們使用一個例子來了解計算機如何使用內存的 8 位元組存儲這些數字：

```
  第0字节：         S    x10  x9   x8   x7   x6   x5   x4
  第1字节：         x3   x2   x1   x0   m51  m50  m49  m48
  第2字节：         m47  m46  m45  m44  m43  m42  m41  m40
  第3字节：         m39  m38  m37  m36  m35  m34  m33  m32
  第4字节：         m31  m30  m29  m28  m27  m26  m25  m24
  第5字节：         m23  m22  m21  m20  m19  m18  m17  m16
  第6字节：         m15  m14  m13  m12  m11  m10  m9   m8
  第7字节：         m7   m6   m5   m4   m3   m2   m1   m0
```

其中的「S」表示符號位，「X」表示指數位（階碼？），「m」表示尾數位。一旦這些數字被讀取，它將轉換成：

　
: <符號> × (1 + < 小數形式的尾數>) × 2<階碼> - 1023

這個方式提供的數字範圍為：

 

這種方式也定義了一些不是數字的值，例如「NaNs」（「不是一個數字」）。這通常用來返回表示數字溢出的信息。通常您不會碰到它，所以我們也不會對它進行進一步討論。一些程序使用 32 位浮點小數。最普遍的是使用 32 位尾數，1 位符號位，8 位階碼和「超 127」格式。它提供 7 位十進位數字。

```
  第0字节：         S    x7   x6   x5   x4   x3   x2   x1   
  第1字节：         x0   m22  m21  m20  m19  m18  m17  m16  
  第2字节：         m15  m14  m13  m12  m11  m10  m9   m8   
  第3字节：         m7   m6   m5   m4   m3   m2   m1   m0
```

數字轉換時使用：

　
: <符號> × (1 + < 小數形式的尾數>) × 2<階碼> - 127

它的範圍為：

 

通常我們可以把 32 位的二進位浮點數稱為「單精度」浮點數，而把 64 位的二進位浮點數稱為「雙精度」浮點數。如果我們使用 real 的時候，通常表示雙精度的浮點數；而使用 float 的時候，我們通常指單精度的浮點數。

但是要記住的是，浮點數在計算機的存儲是連續的：當計算機內存中有一個 64 位數據時，它可能是一個雙精度的浮點數，也可能是兩個單精度的浮點數，或 4 個有符號或無符號的整數，或其它 8 位的數據，這取決於計算機如何讀取它們。如果計算機把 4 個無符號整數以雙精度浮點小數方式讀出的話，它可以得到一個雙精度浮點小數，但這個數據可能是一個垃圾數據。

所以，現在雖然我們已經解決了正、負數的存貯方式，但是對於浮點數來說，仍然存在一些與整數一樣的缺陷，例如：

* 像整數一樣，浮點數也有範圍。雖然我們得到了比整數要大得多的範圍，但是仍然是有限的，如果您試圖把兩個很大的數乘起來，您可能會得到「數據上溢」的錯誤。而如果您把一個小的數字除以一個函大的數字，那就可能使得指數的數值出錯，出現「數據下溢」的錯誤。通常把最大值稱為「機器無窮」，因為它是計算機所能處理的最大的數字。
* 另一個問題是精度。雖然您有 15 位的數字來表示很大的數，但是當對它進行四則運算的時候，它們可能不給您任何提示就把一些數字丟棄。這意味著，如果您把一個很小的數加到一個很大的數值上去的時候，由於這個數字太小，以至於 15 位或 16 位的精度都不能顯示它，計算機就會把這個數字丟棄。如果您在做計算的時候得到一個十分奇怪的數字，您可以需要檢查您的數據範圍是否合適。

　
: 這意味著，如果您做浮點計算，較小的數字很可能被丟棄了。雖然這在平常來說並不明顯，但是如果您是做要求很高的數學分析工作，這些錯誤可能會累積起來，以至於最後得到的結果十分不準確。

　
: 這個錯誤對進行數學研究的人來說十分重要，他們必須對誤差十分了解，以及研究一些辦法來減少誤差，並且應該可以估計到誤差的大小。

　
: 順便說一句，「精度」問題與「範圍」問題不同，前者指的是有關尾數的表示範圍，後者指的是指數的表達範圍。

* 另外一個不太明顯的誤差是由於浮點數的二進位和十進位並不完全相等。如果您操作的數好是 2 的冪級數的倒數，例如 0.75，那是用二進位可以準確的標示為 0.11，因為它剛好是 1/2+1/4 的值。可是不幸的是，您可能通常不會得到如此恰到好處的數字，這就是說，計算機會把一些數字丟掉，例如要表示 0.1，只能使用無窮循環的二進位小數 0.000110011…… 表示了。

如果您對這部分內容不理解，別擔心。這裡的要點是，計算機不是萬能的，它只是一部機器，並要符合一定的規則和受到一定的限制。雖然很多人對計算機抱有孩子似的信任，但是在計算機雖好的解決方法下也有一些不可避免的不精確。

## 程式語言中的數

對於低級語言的編程者來說，他們要擔心有符號和無符號、定點和浮點數的運算。他們必須使用十分不同的代碼來實現操作。

但是，對高級語言的編程者來說，諸如 LISP 和 Python 提供了一些列諸如「有理數」、「複數」之類的抽象數據類型。而他們可以斷言他們的系統可以使用數學操作做正確的運算。由於操作符重載，數學運算可以應用於任何數字 —— 無論是有符號的、無符號的、有理數、定點小數、浮點小數或複數。

## 文本編碼：ASCII 和字符串

現在我們已經得到不同的方法來存儲數據了，那麼文本呢？我們怎麼存儲姓名、地址或寫給朋友的信件呢？

當然，如果您還記得位是位的話，我們沒有理由不能使用位來表達字母「A」或「？」或「Z」之類的。因為很多計算機每次處理一個字節，所以使用單字節的數據來表達單個字母會很方便。我們可以使用這個：

```
  0100 0110 (hex 46)
```

來表示字母「F」。計算機使用這樣的「字符編碼」來向顯示程序傳送要求的文本。

下面是一個用來存儲西方字母的標準二進位編碼，就是通常所說的「美國信息交換標準碼」（英文簡稱「ASCII」），下面的編碼為 ASCII 編碼，使用「d」表示十進位編碼，「h」表示十六進位代碼，「o」表示八進位代碼：

```
 ASCII码表
   ______________________________________________________________________

   ch ctl   d  h  o     ch   d  h  o     ch   d  h   o     ch    d  h   o 
   ______________________________________________________________________

   NUL ^@   0  0  0     sp  32 20 40      @  64 40 100      '   96 60 140 
   SOH ^A   1  1  1      !  33 21 41      A  65 41 101      a   97 61 141 
   STX ^B   2  2  2      "  34 22 42      B  66 42 102      b   98 62 142 
   ETX ^C   3  3  3      #  35 23 43      C  67 43 103      c   99 63 143 
   EOT ^D   4  4  4      $  36 24 44      D  68 44 104      d  100 64 144 
   ENQ ^E   5  5  5      %  37 25 45      E  69 45 105      e  101 65 145 
   ACK ^F   6  6  6      &  38 26 46      F  70 46 106      f  102 66 146 
   BEL ^G   7  7  7      `  39 27 47      G  71 47 107      g  103 67 147 

   BS  ^H   8  8 10      (  40 28 50      H  72 48 110      h  104 68 150 
   HT  ^I   9  9 11      )  41 29 51      I  73 49 111      i  105 69 151 
   LF  ^J  10  a 12      *  42 2a 52      J  74 4a 112      j  106 6a 152 
   VT  ^K  11  b 13      _  43 2b 53      K  75 4b 113      k  107 6b 153 
   FF  ^L  12  c 14      ,  44 2c 54      L  76 4c 114      l  108 6c 154 
   CR  ^M  13  d 15      _  45 2d 55      M  77 4d 115      m  109 6d 155 
   SO  ^N  14  e 16      .  46 2e 56      N  78 4e 116      n  110 6e 156 
   SI  ^O  15  f 17      /  47 2f 57      O  79 4f 117      o  111 6f 157 

   DLE ^P  16 10 20      0  48 30 60      P  80 50 120      p  112 70 160 
   DC1 ^Q  17 11 21      1  49 31 61      Q  81 51 121      q  113 71 161 
   DC2 ^R  18 12 22      2  50 32 62      R  82 52 122      r  114 72 162 
   DC3 ^S  19 13 23      3  51 33 63      S  83 53 123      s  115 73 163 
   DC4 ^T  20 14 24      4  52 34 64      T  84 54 124      t  116 74 164 
   NAK ^U  21 15 25      5  53 35 65      U  85 55 125      u  117 75 165 
   SYN ^V  22 16 26      6  54 36 66      V  86 56 126      v  118 76 166 
   ETB ^W  23 17 27      7  55 37 67      W  87 57 127      w  119 77 167 

   CAN ^X  24 18 30      8  56 38 70      X  88 58 130      x  120 78 170 
   EM  ^Y  25 19 31      9  57 39 71      Y  89 59 131      y  121 79 171 
   SUB ^Z  26 1a 32      :  58 3a 72      Z  90 5a 132      z  122 7a 172 
   ESC ^[  27 1b 33      ;  59 3b 73      [  91 5b 133      {  123 7b 173 
   FS  ^\  28 1c 34      <  60 3c 74      \  92 5c 134         124 7c 174 
   GS  ^]  29 1d 35      =  61 3d 75      ]  93 5d 135      }  125 7d 175 
   RS  ^^  30 1e 36      >  62 3e 76      ^  94 5e 136      ~  126 7e 176 
   US  ^_  31 1f 37      ?  63 3f 77      _  95 5f 137     DEL 127 7f 177 
   ______________________________________________________________________
```

上面這個列表的最左邊有一個些奇怪的字符，例如「FF」和「BS」，這些都不是文本字符。相反，它們是控制字符，也就是說當這些字符發送到特定的設備時，它將產生一些動作。例如「FF」表示換頁，或彈出；「BS」表示退格，而「BEL」表示一個響聲。在一個文本編輯器中，它們會顯示成一個白色或黑色的方塊，或笑臉、音符或其它一些奇怪的符號。要打出這些字符，可以使用 CTRL 鍵和一個合適的代碼。例如同時按住「CTRL」和「G」，或簡寫成「CTRL-G」或「^G」可以打出一個 BEL 字符。

上面這個 ASCII 碼表示定義了 128 個字符，這意味著 ASCII 碼只需要 7 位。但是，很多計算機都以字節為單位存儲信息。這個額外的一位可以定義第二個 128 個字集，一個「擴展」字集。

在實際中，有很多不同的「擴展」字集，提供很多例如數學符號等的符號或非英語字符。這個擴展字集並沒有進行標準化，並經常會引起混淆。

這個表格強調了這篇文章的主題：位就是位。這樣的話，您可以使用位來表示字符。您可以把特殊的代碼描述成特殊的十進位、八進位和十六進位，但是它們仍然是相同的代碼。這些數值的表達，無論是十進位、八進位或十六進位，都只是相同的位的表達。

當然，您可能在一段話中表達很多的字符，例如：

　
: Tiger, tiger burning bright!

這只是簡單的替換成 ASCII 碼，表示成：

　
: 54 69 67 65 72 2c 20 74 69 67 65 72 20 62 75 ...

計算機把這種 ASCII「字符串」以連續空間的「數組」來存儲。一些應用程式可以包括一個二進位數值表示字符串的長度，但是更通常的做法是使用一個表示結尾的字符 NULL（ASCII 表中的 0 字符〕表示字符串的結束。

## 參見

* 二進位
* 二進位數學
* 二進位編碼數據
* 八進位
* 十六進位