2011-04-15 42 views
3

我知道我們需要將十進制,八進制和十六進制轉換爲二進制,但我很困惑將十進制轉換爲八進制或八進制轉換爲十六進制或將十進制轉換爲十六進制。 爲什麼我們需要這些類型的轉換?在不同基地之間轉換數字有任何實際用途嗎?

+1

事實上,在一些頭疼的事情發生後,我不得不提出任何案例,當我不得不使用這樣的轉換。但是當我年輕時,我們不得不!那些舊機器是用匯編程序編程的,它只用八進制作爲輸入,任何小數(例如所需的乳房大小)應該先被轉換成八進制數! – 2011-04-15 05:51:47

回答

0

我在這裏有偶爾的用途。一個用例可以是一個小應用程序,它允許用戶將小數轉換爲八進制......就像可以用很多計算器一樣。

但我不確定我是否理解問題的重點。標準庫通常不提供像String toOctal(String decimal)這樣的方法。相反,您通常會將十進制字符串轉換爲基本整數,然後從原始整數轉換爲(比如)八進制字符串。

+2

當然。在基地之間進行轉換的唯一原因是製作一個計算器功能,讓用戶在基地之間進行轉換。 ;) – jakev 2011-04-15 05:16:30

+0

我不會說「只」......但它肯定是最明顯的例子。 – 2011-04-15 05:26:15

5

不同的基地適合不同的目的。

  • 十進制很明顯是大多數人知道如何處理的,所以對於最終用戶的實際輸出量是很好的。
  • 十六進制很短並且每個字節的偶數比例正好爲2個字符,因此它適用於表示類似SHA1哈希或私鑰等類似格式的大數字,特別是因爲這些數字並不真正表示一個數量,所以用戶不需要能夠將它們理解爲數字。
  • 八進制主要是出於傳統原因 - 例如,UNIX文件許可代碼傳統上表示爲八進制數,因爲每位數字的三位很好地對應於UNIX權限編碼方案的每個用戶類別的三位。

一個人有時會想要在一個基地使用數字來達到需要另一個基地的目的。因此,可用的各種轉換功能。但事實上,我的經驗是,在實踐中,除了將數字從一些非二進制基數轉換爲二進制數(以您選擇的本地整數類型的語言形式)並且退出後,您幾乎從不會從一個基地轉換到另一個基地進入你需要輸出的任何基地。大多數情況下,從一個非二進制基數到另一個非基數時,都是在瞭解基數並瞭解不同基數的數字時,或者使用十六進制輸出進行調試時。即便如此,如果一臺計算機這樣做,主要方法是轉換爲二進制,然後退出,因爲當前的計算機本質上擅長處理基數爲2的數字,而對其他任何數字都不太好。

一個重要的地方,你看到的數字實際存儲和操作在十進制是在一些金融應用或其他重要的是保留「小數位數」級別的精度。有時候定點算術可以用於貨幣,但並不總是如此,如果它不使用二進制浮點數是一個壞主意。老的系統實際上已經以二進制編碼的十進制算術的形式支持它。在BCD中,每4位用作一個十進制數字,因此您放棄了每4位存儲的一塊,以換取在非計算機世界的基礎上保持精度水平。

奇怪的是,有一個常見的用例是其他基地有點隱藏。支持大量支持的現代語言(例如Python 2.x的long類型或Java的BigIntegerBigDecimal類型)通常會將數字內部存儲在數組中,每個元素都是某個基數中的數字。然後他們實現他們在該基數字符串上支持的數學。真正有效的bigint實現可能實際上使用接近2 ^(基於機器本地字大小的位)的基址;基數2^64的數字顯然不可能以這種形式有用地輸出,但是以這種大小的塊進行計算最終將充分利用空間和CPU。(我不知道這是否是最好的基礎;最好使用一半的位數來簡化從一位數字到另一位數字的溢出處理。自從我編寫我自己的bigint並且我從未實現過一段時間乘法和除法的更快/更復雜的版本)。

+0

你整齊地解釋了爲什麼不同的基地正在使用,但完全沒有解釋爲什麼要轉換一個到另一個! :D – 2011-04-15 05:35:31

+0

好點。將編輯。 – 2011-04-15 09:46:18

2

如果你的工作場所被困在IPv4 CIDR中 - 你會做很多bin - > hex - >十進制轉換來管理大部分網絡設備,直到你會記住他們(或者只是使用一些隨機的,簡單的工具)。

即使這種用法有點少之又少 - 大多數企業只採用懶惰的「/ 24所有」方法。

如果你做了大量的圖形工作 - 有機會你需要在系統之間轉換顏色,並需要從十六進制轉換 - >十二月......儘管如此,大多數工具都內置在顏色選擇器中。

我想沒有什麼實際的理由可以做,除非它非常簡單,沒有意義沒有學習如何去做。 :)

...除非由於某種原因,你試圖做你的頭腦中的尾數二進制數學。

+0

好的! IPv4確實將十進制和位掩碼(導致二進制)混合成一種表示法。實際上,IPv6也是這樣::: 1/127,對吧? – 2011-04-15 05:38:38

+0

事實上,我不知道很多人手動進行IPv6計算。 :)他們要麼讓他們記憶,要麼使用工具。我見過(也是我)經常手動執行IPv4。 – tamarintech 2011-04-15 15:01:52

1

所有這些基地都有其用途。特別是十六進制可用作二進制的簡寫。每個十六進制數字相當於4位,因此您可以將一個完整的32位值寫爲8位十六進制數字的字符串。同樣,八進制數字相當於3位,並且經常用作Unix文件權限(777 =設置讀取,寫入,執行用戶/組/其他)的事物的簡寫。

沒有一個基地是特殊的 - 他們都有他們(隱晦)的用途。小數對我們來說很特別,因爲它反映了人類的經驗(10根手指),但這確實是唯一的原因。

3

MIME對帶引號的可打印編碼使用十六進制系統(例如Unicode中的郵件主題)基於64位系統的Base64編碼。

1

一個真實的世界用例:一個程序以十進制打印錯誤代碼,從數據庫或因特網上獲取信息需要十六進制格式,因爲錯誤'數字'的位傳遞額外的信息,你需要看看它在二進制。

+0

接着提交一份錯誤報告,要求提供更好的錯誤打印輸出,包括可查找的錯誤代碼:) – sarnold 2011-04-15 07:10:48

相關問題