自人類開始計算數字以來,發明了許多記錄數字的方法,最直接的方法就是一條線代表一,兩條線現代表二……,但是總不能以十個線條表示十,以一百個線條表示一百 ( 事實上,有些地區的人,一開始只能計算到三,三以上就被認為很多,人類計數,也是一部經歷數萬年的歷史 )。有許多民族想出了解決之道,羅馬人是其中之一,他們用一個符號代表五,另一個符號代表十,
I 表示一 X 表示十 M 表示一千 II 表示二 L 表示五十 V 表示五千 III 表示三 C 表示一百 V 表示五 D 表示五百
現在有些時鐘鐘面上,仍用羅馬數字表示。這種方式雖然是很大的進步,但要表示百、千、萬就麻煩了。( 註二:羅馬數字)
我們現在用的數字系統是印度人發明的(有一說是阿拉伯人)和一般表示數字的方法有兩點不同,一是零的發明,一是用位置表示位數。它用 1 代表一、2 代表二,一直到了九變成十的時候就發生進位,這時用 1 表示十位數,後面用 0 表示個位數,表示空位或沒有的意思,於是就變成了 10 表示十。因此數字所在的位置不同,代表的意義就不同,小學生都知道 100 這個數有兩個 0,但這兩個零是不一樣的。零的發明,在計數上有很重要的意義。
00 表示 0 01 表示 1 10 表示 2 11 表示 3
如果有三個記憶體,就有八種表示方法,代表 0 到 7:
000 表示 0 001 表示 1 010 表示 2 011 表示 3 100 表示 4 101 表示 5 110 表示 6 111 表示 7
你可以看得出來,如果每加入一個記憶體,可以計數的個數就變成原來的兩倍。在電腦中用八個記憶體(也就是八位元)表示 0 到 255 共有 256 個數字。
0000 0000 表示 0 0000 0001 表示 1 0000 0010 表示 2 0000 0011 表示 3 0000 0100 表示 4 …… 1111 1111 表示 255
事實上,上面這些例子的左邊一大堆的 0 和 1 就是所謂的二進位數,也就是電腦看得懂的數,右邊就是我們所熟知的十進位數。那二進位和十進位之間要怎麼轉換呢?
二進位數變成十進位數,只要記得 2 的冪方就可以了。也就是說 20=1、21=2、22=4、23=8 ……,計算方式如下,最右邊的那一位數若為一,表示加一,若為零表示不加;右邊第二位數若為一表示加 2,若為零表示不加;右邊第三位數若為一表示加 4,若零表示不加,依此類推,最後再總加起來就可以了。舉例來說,下圖
而十進位變成二進位就用連續減去 2 的冪方數即可。舉例來說,把 171 變成二進位數方法如下:
171 - 128 = 43 128 的那一位數有一 43 - 64 不夠減了,所以 64 那一位為零 43 - 32 = 11 32 的那一位數為一 11 - 16 不夠減了,所以 16 那一位為零 11 - 8 = 3 8 的那一位數為一 3 - 4 不夠減了,所以 4 那一位為零 3 - 2 = 1 2 的那一位數為一 1 最後還剩下一,所以最右邊那一位數為一最後綜合上式,由上而下得到 1010 1011,就是 171 的二進位數。
十進位 | 二進位 | 十六進位 | 十進位 | 二進位 | 十六進位 |
---|---|---|---|---|---|
0 | 0000 | 0 | 8 | 1000 | 8 |
1 | 0001 | 1 | 9 | 1001 | 9 |
2 | 0010 | 2 | 10 | 1010 | A |
3 | 0011 | 3 | 11 | 1011 | B |
4 | 0100 | 4 | 12 | 1100 | C |
5 | 0101 | 5 | 13 | 1101 | D |
6 | 0110 | 6 | 14 | 1110 | E |
7 | 0111 | 7 | 15 | 1111 | F |
超過十六進位的 F 時,就發生進位了,這時就變成 10H,也就是 16D;11H 就是 17D。
在組合語言中為了區分這些數字系統,在數字後加上 H 表示十六進位數,加上 D 表示十進位數,加上 O 表示八進位數,加上 B 表示二進位數。此外如果是十六進位而且第一位是英文字母,要在最前面加上阿拉伯數字的 0,才不會使編譯器誤認為是變數名稱,例如表示十六進位的 A12,要用 0A12h,英文字母用大寫或小寫都是一樣的。
再仔細看看,一位的十六進位數剛好可以用四位元表示,也就是說,一位十六進位數必需用四位二進位數表示,換句話說二進位和十六進位之間的轉換就是用這個關係,稍候再說明。
十六進位和十進位數之間的轉換是最常用的,先說說如何將十六進位變成十進位。在說明如何變換前,先回想小學時假如有一個十進位數 1399,它的數值大小是不是等於 1x103+3x102+9x101+9 呢?這是因為是十進位,所以乘以 10 的冪方數﹔同理如果是十六進位就乘以 16 的冪方數,另外要注意,A 要等於 10d、B 等於 11d 等等。舉例來說,現在想把 2AC1 這個十六進位數變成十進位數,
2AC1H = 2x163+10x162+12x161+1 = 2x4096+10x256+12x16+1 = 8192+2560+192+1 = 10945
十進位變十六進位可以用連續減法,或者用除法(事實上除法就是連續減法的結果),在此我用除法說明好了,連續減法可以參考上面十進位變二進位的方法。例如現在我把 10945D 變成十六進位,於是先除以 16(為什麼除以 16?想想看)得到餘數就是十六進位的個位數,其商再除 16 ……。例如將 11523 換成十六進位數,步驟如下:
11523 ÷16 =720 ..... 3 → 餘數為十六進位的個位數 720 ÷16 = 45 ..... 0 → 餘數為十六進位的十位數 45 ÷16 = 2 ..... 13 → 餘數 13 (即十六進位 0DH)為十六進位的百位數 2 ÷16 = 0 ..... 2 → 餘數為十六進位的千位數所以 11523d=2D03h 。
0011 變成 3 0101 變成 5 1011 變成 B 0100 變成 4 0101 變成 5得到 35B45H。同理如果是十六進位變成二進位就將上述步驟反方向運算即可。
以上的說明雖然簡單,但是如果要寫成程式,仍有一段距離,請參考第四章到第八章。
羅馬數字用加法和減法的概念來簡化計數方式。不過在說明如何用羅馬數字表示之前,得先介紹羅馬數字常見的符號:
I 表示一 V 表示五 X 表示十 L 表示五十 C 表示一百 D 表示五百 M 表示一千 表示五千 表示一萬
在書寫羅馬數字時,必須由左邊向右邊書寫,所以二用『II』表示,代表 1+1,三用『III』表示,代表 1+1+1,這兩個數字,用的是加法的觀念。但是四卻用『IV』表示,代表 5-1 ,在羅馬數字中為了簡化書寫,如果一個較小數寫在較大數左邊,則表示相減;反過來說,相同的數寫在一起或小數寫在大數右邊,則表示相加。像前面所說的『II』和『III』,還有六也是用『VI』,它們都表示加法的概念。
我想把 1 到 100 的羅馬數字表示方法列成一張表,就很清楚了。
阿拉伯數字 | 羅馬數字 | 阿拉伯數字 | 羅馬數字 | 阿拉伯數字 | 羅馬數字 | 阿拉伯數字 | 羅馬數字 |
1 | I | 26 | XXVI | 51 | LI | 76 | LXXVI |
2 | II | 27 | XXVII | 52 | LII | 77 | LXXVII |
3 | III | 28 | XXVIII | 53 | LIII | 78 | LXXVIII |
4 | IV | 29 | XXIX | 54 | LIV | 79 | LXXIX |
5 | V | 30 | XXX | 55 | LV | 80 | LXXX |
6 | VI | 31 | XXXI | 56 | LVI | 81 | LXXXI |
7 | VII | 32 | XXXII | 57 | LVII | 82 | LXXXII |
8 | VIII | 33 | XXXIII | 58 | LVIII | 83 | LXXXIII |
9 | IX | 34 | XXXIV | 59 | LIX | 84 | LXXXIV |
10 | X | 35 | XXXV | 60 | LX | 85 | LXXXV |
11 | XI | 36 | XXXVI | 61 | LXI | 86 | LXXXVI |
12 | XII | 37 | XXXVII | 62 | LXII | 87 | LXXXVII |
13 | XIII | 38 | XXXVIII | 63 | LXIII | 88 | LXXXVIII |
14 | XIV | 39 | XXXIX | 64 | LXIV | 89 | LXXXIX |
15 | XV | 40 | XL | 65 | LXV | 90 | XC |
16 | XVI | 41 | XLI | 66 | LXVI | 91 | XCI |
17 | XVII | 42 | XLII | 67 | LVII | 92 | XCII |
18 | XVIII | 43 | XLIII | 68 | LXVIII | 93 | XCIII |
19 | XIX | 44 | XLIV | 69 | LXIX | 94 | XCIV |
20 | XX | 45 | XLV | 70 | LXX | 95 | XCV |
21 | XXI | 46 | XLVI | 71 | LXXI | 96 | XCVI |
22 | 47 | XLVII | 72 | LXXII | 97 | XCVII | |
23 | XXIII | 48 | XLVIII | 73 | LXXIII | 98 | XCVIII |
24 | XXIV | 49 | XLIX | 74 | LXXIV | 99 | XCIX |
25 | XXV | 50 | L | 75 | LXXV | 100 | C |
其中有兩處是比較特別的,一是『49』,另一處是『99』,它們不是分別用『IL』和『IC』表示。49 應該先寫代表『40』的『XL』,再寫代表『9』的『IX』,所以『49』應該用『XLIX』表示。同理『99』應該用『XCIX』表示。