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。其他字符以此類推。