NOIP初賽指南/進制與編碼

維基教科書,自由的教學讀本

在 NOIP 初賽中,往往有涉及進制和編碼的題目,如將4種進制的數放在一起比大小。

所以,學習進制和編碼,是十分重要的事。

進制[編輯]

十進制轉二進制[編輯]

十進制轉二進制要分兩部分:整數部分小數部分

整數部分用短除法,而小數部分用乘法。

如圖,通過不斷地除以2後取余,最後到1為止。需要注意的是,這裏必須要倒着寫,如11的二進制為1011,而並非1101。

小數部分,則通過不斷乘2,再取整數並將其減去,直到乘到結果為1(需要指明的是,不是所有數最終都能乘到結果為1。如圖:

方法同樣適用於十進制轉八進制和十六進制。

二進制、八進制、十六進制的互相轉換[編輯]

相比於將十進制轉換為二進制、八進制和十六進制,二進制、八進制和十六進制的互相轉換更為簡單。這是因為它們都可以與二進制相對應。這裏舉例將(326.27)8轉換為二進制:

如圖,我們可以看到,八進制的一位對應二進制的三位。

事實上,十六進制的一位對應二進制的四位。

八進制與二進制對應表
八進制 二進制
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
十六進制與二進制對應表
十六進制 二進制
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

提醒:在將二進制轉換為八進制或十六進制時,如有位數不夠的,必須往兩邊補0,不能往中間補。

其他進制轉十進制[編輯]

方法:按權展開求和。(ABC)x=(A*x2+B*x1+C*x0)10

例:(1011.01)2=(1×23+0×22+1×21+1×20+0×2-1+1×2-2)10=(11.25)10

(7AF)16=7×162+10×161+15×160=1967

編碼[編輯]

一般,我們常常會用 Unicode 編碼或者 ASCII 碼進行存儲。

Unicode[編輯]

這裏就去看連結吧。

ASCII[編輯]

所謂的 ASCII 碼,就是美國信息交換標準碼(American Standard Code for Information Interchange)。它可以用於所有拉丁字母的表示,但是不能表示漢字。

在 ASCII 嗎中,「0」為48,「A」為65,「a」為97。其他字符以此類推。