電腦網路新手 文件 十六進位計算法轉貼
作者: 張恆欣 (02-02 11:36) 發表討論 列印 詳細資料
標題: 十六進位計算法

http://tek.fetag.org:8080/read_article.aspx?id=17


2, 10, 16 進位的計算法

tek(Tek CyberSpace)
N/A - 關鍵字:binary, decimal, hexadecimal


二進位、十進位、十六進位是我們在電腦上常可能會
看到的進位計數法• 每一個進位算法都有不同的數
值、和base• 我在這邊將會展示10與16進位的算法,
和10與2進位的算法•

如果您還未學過(或忘掉)怎麼算power(次方數),跟
modulus (餘數) (兩個差不多是在國一就學到的東西
),建議您先瞭解先如何算這兩個東西會學的比較輕鬆•

【介紹】symbol 與 term說明

Binary = 二進位 (電腦唯一接受/處理的 System)
數值範圍: 0 與 1

Decimal = 十進位 (全人類最接受的 System)
數值範圍: 0 1 2 3 4 5 6 7 8 9

Hexadecimal = 16 進位 (為了更容易看懂二進位可能用的方法)
數值範圍: 0 1 2 3 4 5 6 7 8 9 A B C D E F

^ 符號 = 算次方數

/ 符號 = 除於

•符號 = 乘於

【算法】Binary 與 10進位的演算

在電腦或人類的世界裡,每一樣事情的後面都藏有 0 與 1
的邏輯• 這也是電腦唯一看的懂的語言•在Binary裡,每
一個單一數字我們都叫它 "bit" ,這是最小的單位• 而
再來每四個 bit 叫 "nibble" ,每八個 bit 就叫一個
"Byte"•在這裡我們計算的方式是處理nibble為一個結果...
例如 0110 在十進位是6,0101是5,0011是3...etc•這一
種算法是這樣出來的:

假設你有兩組數字是 0010
在這邊基本上你必須要算4次,每一次的Base都是乘於二(
因為是Binary)並算入次方數(大到小的數字)• 但必須注
意的是,算Binary是從左看到右過去的,但你的次方數卻
是從右到左,而且0 也包括在內(因為零本身是一個數字)•

所以,依照這種方式,我們就這樣算:

0•2^3 + 0•2^2 + 1•2^1 + 0•2^0

算出來的結果,你會得到 2 • 這就是算出來的 Decimal 值•

那Decimal 要怎麼算回去Binary呢? 這不難,你的值必須
要每一次都除於你要算回去的Base (注意只求整數),然後
每一個算出來的餘數就是Binary的一個數字• 注意在這邊
,當你除到最後得到的整數結果是 0 的話,那麼你就必須
要停止計算,並把所有剩下的Binary數值都直接填為 0 •
 我們再以剛得到的 Decimal 值拿來再算回 Binary:

2 / 2 = 1, 餘數 = 0
1 / 2 = 0, 餘數 = 1

由於我們最後除出來的整數結果是0,所以停止運算• 並
把剩下的 Binary 數字都填入 0 • 然後我們就會得到這
一個 Binary value: 0010 (排出來不是0100喔,很多人
有時都會看錯或排錯順序)

我再舉一個例子:

Decimal value : 7

7 / 2 = 3, modulus = 1
3 / 2 = 1, modulus = 1
1 / 2 = 0, modulus = 1

Binary value = 0111

【算法】Decimal 與 Hexadecimal 的演算

10 進位與 16 進位就很好算... 不過首先你必須要先死
背數字 10 ~ 15 是英文 A-~ F 的英文字母• 然後我們
給一個 Decimal 數字 (算到hexadecimal),例如 16•
其實就跟上面的算法差不多,你必須要每一次都除於Base
,然後抓餘數,算到除出來的整數是 0:

16 / 16 = 1, modulus = 0
1 / 16 = 0, modulus = 1

然後,排的順序就跟Decimal 算回 Binary一樣,只是這
一次我們不需要另外填什麼 0 進去• 然後我們就回得到
 10 ,也就是 A • 很簡單吧!? 都是同樣的算法... 我
們在舉個例子,不過這一次我們用大一點的數字,用200:

200 / 16 = 12, modulus = 8
12 / 16 = 0, modulus = 12

8 = 8
12 = C

等於: C8

那如果要從16進位再給他算回10進位呢?

C8:

C = 12
8 = 8

12•16 = 192 再加 8 = 200 (Decimal value)
也可以這樣算:
12•16^1 + 8•16^0 = 200 (Decimal value)

有什麼差? 沒有,寫法不一樣而已• But they're all behind the same logic.

再以一個 Hexadecimal 為例,假設這一個我們用的是...
"DECADE"•要算回Decimal:

D = 13
E = 14
C = 12
A = 10
D = 13
E = 14

13•16^5 + 14•16^4 + 12•16^3 + 10•16^2 + 13•16^1 + 14•16^0 = 14600926

【最後】備註

看完了這一篇,您是否已經掌握到算進去又算出來的算法
了呢? 沒錯,事實上不管你怎麼算,大家的方法其實都是
一模一樣的•只不過,算這種東西基本上是挺累的事情...
不在他的數學難,而是算的很囉嗦• 如果你受不了,建議
您還是拿出自己的計算機玩一玩吧 :-) 這是最快的辦法了!

【連結】參考資料

1. 如果您是拿資訊課的高職生,我聽說大家的計算機概論
都會教這個算法• 所以,看看課本有沒有吧•
2. 這一個連結是一個 Decimal 和 Hexadecimal 的 Table:
http://www.jaworski.com/htmlbook/dec-hex.htm

 

相關討論:
  1. 關於演算法的討論 (2 篇回應, 01-21 18:03 by GreenLiao(桂依))