標籤:

為你揭開進位的秘密

內容節選自《程序員的數學》,已獲圖靈許可,由[好玩的數學]編輯整理,標題為小編所加,特此感謝。

好玩的數學書店 點擊可立即購買↓↓↓

小程序

《程序員的數學》,[日]結城浩著,管傑譯,人民郵電出版社

小學一年級的回憶

以下是小學一年級時發生的事,我依然記憶猶新。

「下面請打開本子,寫一下『十二』。」老師說道。於是,我翻開嶄新的本子,緊握住削尖了的鉛筆,寫下了這樣大大的數字。

老師走到我跟前,看到我的本子,面帶微笑親切地說:「寫得不對喔。應該寫成 12 喔。」

當時我是聽到老師說「十二」,才寫下了 10 和 2。不過那樣是不對的。眾所周知,現在我們把「十二」寫作 12。

而在羅馬數字中,「十二」寫作 XII。X 表示 10,I 表示 1。II 則表示兩個並排的 1,即 2。也就是說,XII 是由 X 和 II 組成的。

如同「十二」可以寫作 12 和 XII,數字有著各種各樣的計數法。12 是阿拉伯數字的計數法,而 XII 是羅馬數字的計數法。無論採用哪種計數法,所表達的「數字本身」並無二致。下面我們就來介紹幾種計數法。

10進位計數法

什麼是 10 進位計數法?

我們平時使用的是 10 進位計數法。

  • 使用的數字有 0、1、2、3、4、5、6、7、8、9 共 10 種。

  • 數位有一定的意義,從右往左分別表示個位、十位、百位、千位……

(註:這裡的「種」指的是數字的種類,用來說明 10 進位和 2 進位中數字複雜程度的差異。如 2561 中包含四種數字,而 1010 中只包含兩種數字。——譯者注)

以上規則在小學數學中都學到過,日常生活中也一直在用,是眾所周知的常識。在此權當複習,後面我們將通過實例來了解一下 10 進位計數法。

分解 2503

首先,我們以 2503 這個數為例。2503 表示的是由 2、5、0、3 這 4 個數字組成的一個稱作 2503 的數。

這樣並排的數字,因數位不同而意義相異。

2 表示「1000 的個數」。

5 表示「100 的個數」。

0 表示「10 的個數」。

3 表示「1 的個數」。

綜上所述,2503 這個數是 2 個 1000、5 個 100、0 個 10 和 3 個 1 累加的結果。用數字和語言來冗長地說明有些無趣,下面就用圖示來表現。

如圖,將數字的字體大小加以區別,各個數位上的數字 2、5、0、3 的意義便顯而易見了。1000 是 10×10×10,即 103(10的 3 次方),100 是 10×10,即 10(10 的 2 次方)。因此,也可以寫成如下形式(請注意箭頭所示部分)。

再則,10 是 101(10 的 1 次方),1 是 100(10 的 0 次方 ),所以還可以寫成如下形式。

千位、百位、十位、個位,分別可稱作 103 的位、102 的位、101 的位、100 的位。10 進位計數法的數位全都是 10n 的形式。這個 10 稱作 10 進位計數法的基數或底。

基數 10 右上角的數字——指數,是 3、2、1、0 這樣有規律地順次排列的,這點請記住。

2進位計數法

下面講解 2 進位計數法。

什麼是 2 進位計數法?

計算機在處理數據時使用的是 2 進位計數法。從 10 進位計數法類推,便可很快掌握它的規則。

  • 使用的數字只有 0、1,共 2 種。

  • 從右往左分別表示 1 位、2 位、4 位、8 位……

用 2 進位計數法來數數,首先是 0,然後是 1,接下去……不是 2,而是在 1 上面進位變成 10,繼而是 11,100,101……

表 1-1 展示了 0 到 99 的數的 10 進位計數法和 2 進位計數法。

分解 110

在此,我們以 2 進位表示的 1100(2 進位數的 1100)為例來探其究竟。

和 10 進位計數法一樣,並排的數字,各個數位都有不同的意義。從左往右依次為:

1 表示「8 的個數」。

1 表示「4 的個數」。

0 表示「2 的個數」。

0 表示「1 的個數」。

也就是說,2 進位的 1100 是 1 個 8、1 個 4、0 個 2 和 0 個 1累加的結果。這裡出現的 8、4、2、1,分別表示 23、22、21、20。即 2 進位計數法的 1100,表示如下意思。

如此計算就能將 2 進位計數法的 1100 轉換為 10 進位計數法。

由此可以得出,2 進位的 1100 若用 10 進位計數法來表示,則為 12。

基數轉換

接下來我們試著將 10 進位的 12 轉換為 2 進位。這需要將 12 反覆地除以 2(12 除以 2, 商為 6 ;6 再除以 2,商為 3 ;3 再除以 2……),並觀察餘數為「1」還是「0」。餘數為 0 則表示「除完了」。隨後再將每步所得的餘數的列(1 和 0 的列)逆向排列,由此就得到 2 進位表示了。

同樣地,我們試將 10 進位的 2503 轉換為 2 進位計數法。

我們從圖 1-2 可以知道 2503 用 2 進位表示為 100111000111。各個數位的權重如下:

在 10 進位中,基數為 10,各個數位是以 10n 的形式表現的。而 2 進位中,基數為 2, 各個數位是以 2n 的形式表現的。從 10 進位計數法轉換為 2 進位計數法,稱作 10 進位至 2 進位的基數轉換。

計算機中為什麼採用 2 進位計數法

計算機中一般採用 2 進位計數法,我們來思考一下原因。計算機在表示數的時候,會使用以下兩種狀態。

  • 開關切斷狀態

  • 開關連通狀態

雖說是開關,但實際上並不需要機械部件,你可以想像成是由電路形成的「電子開關」。總之,它能夠形成兩種狀態。這兩種狀態,分別對應 0 和 1 這兩個數字。

  • 開關切斷狀態 … 0

  • 開關連通狀態 … 1

1 個開關可以用 0 或 1 來表示,如果有許多開關,就可以表示為許多個 0 或 1。你可以想像這裡排列著許多開關,各個開關分別表示 2 進位中的各個數位。這樣一來,只要增加開關的個數,不管是多大的數字都能表示出來。

當然,做成能夠表示 0 ~ 9 這 10 種狀態的開關,進而讓計算機採用 10 進位計數法,這在理論上也是可能的。但是,與 0 和 1 的開關相比,必定有更為複雜的結構。

另外,請比較一下圖 1-3 和圖 1-4 所示的加法表。2 進位的表比 10 進位的表簡單得多吧。

若要做成 1 位加法的電路,採用 2 進位要比 10 進位更為簡便。

不過,比起 10 進位,2 進位的位數會增加許多,這是它的缺點。例如,在 10 進位中2503 只有 4 位,而在 2 進位中要表達同樣的數則需要 100111000111 共 12 位數字。這點從表 1-2 中也顯而易見。

人們覺得 10 進位比 2 進位更容易處理,是因為 10 進位計數法的位數少,計算起來不容易發生錯誤。此外,比起 2 進位,採用 10 進位能夠簡單地通過直覺判斷出數值的大小。人的兩手加起來共有 10 個指頭,這也是 10 進位更容易理解的原因之一。

不過,因為計算機的計算速度非常快,位數再多也沒有關係。而且計算機不會像人類那樣發生計算錯誤,不需要靠直覺把握數字的大小。對於計算機來說,處理的數字種類少、計算規則簡單就最好不過了。

讓我們來總結一下。

  • 在 10 進位計數法中,位數少,但是數字的種類多。

    →對人類來說,這種比較易用。

  • 在 2 進位計數法中,數字的種類少,但是位數多。

    →對計算機來說,這種比較易用。

鑒於上述原因,計算機採用了 2 進位計數法。

人類使用 10 進位計數法,而計算機使用 2 進位計數法,因此計算機在執行人類發出的任務時,會進行 10 進位和 2 進位間的轉換。計算機先將 10 進位轉換為 2 進位,用 2 進位進行計算,再將所得的 2 進位計算結果轉換為 10 進位。

按位計數法下面來介紹按位計數法。

什麼是按位計數法

我們學習了 10 進位和 2 進位兩種計數法,這些方法一般稱作按位計數法。除了 10 進位和 2 進位以外,還有許多種類的按位計數法。在編程中,也常常使用 8 進位和 16 進位計數法。

  • 8 進位計數法

8 進位計數法的特徵如下:

  • 使用的數字有 0、1、2、3、4、5、6、7 共 8 種。

  • 從右往左分別為 80 的位、81 的位、82 的位、83 的位……(基數是 8)

  • 16 進位計數法

16 進位計數法的特徵如下:

  • 使用的數字有 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F 共 16 種。

  • 從右往左分別為 160 的位、161 的位、162 的位、163 的位……(基數是 16)

  • 在 16 進位計數法中,使用 A、B、C、D、E、F(有時也使用小寫字母 a、b、c、d、e、f)來表示 10 以上的數字。

  • N 進位計數法

一般來說,N 進位計數法的特徵如下:

  • 使用的數字有 0,1,2,3,…,N-1,共 N 種。

  • 從右往左分別為 N0 的位、N1 的位、N2 的位、N3 的位……(基數是 N)

例如,N 進位計數法中,4位數 a3a2a1a0 為a3×N3+a2×N2+a1×N1+a0×N0(a3、a2、a1、a0是0~N-1中的數字。)

不使用按位計數法的羅馬數字

按位計數法在生活中最為常見,因此人們往往認為這種方法是理所當然的。實際上, 在我們身邊也有不使用按位計數法的例子。

例如,羅馬計數法。

羅馬數字至今還常常出現在鐘錶錶盤上。

還有,在電影最後放映的演職員名單中,也會出現表示年號的 MCMXCVIII 等字母。這也是羅馬數字。

羅馬計數法的特徵如下:

  • 數位沒有意義,只表示數字本身

  • 沒有 0

  • 使用 I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000) 來記數

  • 將並排的數字加起來,就是所表示的數。

例如,3 個並排的 I(III)表示 3,並排的 V 和 I(VI)表示 6,VIII 表示 8。

羅馬數字的加法很簡單,只要將羅馬數字並排寫就可以得到它們的和。比如,要計算1+2,只要將表示 1 的 I 和表示 2 的 II 並排寫作III 就行了。但是,數字多了可就不太簡單了。

例如,計算 3+3 並不是把 III 和 III 並排寫作 IIIIII,而是將 5 單獨拿出來寫作 V,所以 6 就應該寫作 VI。CXXIII(123) 和 LXXVIII(78) 的加法, 也不能僅僅並排寫作CXXIIILXXVIII,而必須將 IIIII 轉換為 V,VV 轉換為 X,XXXXX 轉換為 L,再將 LL 轉換為 C,如此整理最後得到 CCI(201)。在「整理」羅馬數字的過程中,必須進行與按位計數法的進位相仿的計算。

羅馬計數法中還有「減法規則」。例如 IV,在 V 的左側寫 I,表示 5-1,即 4(在鐘錶錶盤上,由於歷史原因也有將 4 寫作 IIII 的)。

讓我們試著將羅馬數字的 MCMXCVIII 用 10 進位來表示。

可以發現,MCMXCVIII 表示的就是 1998。羅馬數字真是費勁啊!


推薦閱讀:

【重磅】澳洲風水龍虎朝陽!著名風水大師揭開澳洲買樓!買地!驚天秘密!!
天乾的秘密
比完美更美的秘密:做個好女人該做的事
男人的秘密,都藏在了褲腿里
錢怎麼來的?富人私藏的財富秘密丨理財

TAG:秘密 | 進位 |