轉載自 https://blog.csdn.net/liubing8609/article/details/82695059
1) 整數部分
十進制整數轉換為N進制整數采用“除N取余,逆序排列”法。具體做法是:
將N作為除數,用十進制整數除以N,可以得到一個商和余數;
保留余數,用商繼續除以N,又得到一個新的商和余數;
仍然保留余數,用商繼續除以N,還會得到一個新的商和余數;
……
如此反復進行,每次都保留余數,用商接着除以N,直到商為0時為止。
把先得到的余數作為N進制數的低位數字,后得到的余數作為N進制數的高位數字,依次排列起來,就得到了N進制數字。
下圖演示了將十進制數字36926轉換成八進制的過程:
從圖中得知,十進制數字36926轉換成八進制的結果為110076。
下圖演示了將十進制數字42轉換成二進制的過程:
從圖中得知,十進制數字42轉換成二進制的結果為101010。
2) 小數部分
十進制小數轉換成N進制小數采用“乘N取整,順序排列”法。具體做法是:
用N乘以十進制小數,可以得到一個積,這個積包含了整數部分和小數部分;
將積的整數部分取出,再用N乘以余下的小數部分,又得到一個新的積;
再將積的整數部分取出,繼續用N乘以余下的小數部分;
……
如此反復進行,每次都取出整數部分,用N接着乘以小數部分,直到積中的小數部分為0,或者達到所要求的精度為止。
把取出的整數部分按順序排列起來,先取出的整數作為N進制小數的高位數字,后取出的整數作為低位數字,這樣就得到了N進制小數。
下圖演示了將十進制小數0.930908203125轉換成八進制小數的過程:
從圖中得知,十進制小數0.930908203125轉換成八進制小數的結果為0.7345。
下圖演示了將十進制小數0.6875 轉換成二進制小數的過程:
從圖中得知,十進制小數 0.6875 轉換成二進制小數的結果為 0.1011。
如果一個數字既包含了整數部分又包含了小數部分,那么將整數部分和小數部分開,分別按照上面的方法完成轉換,然后再合並在一起即可。例如:
十進制數字 36926.930908203125 轉換成八進制的結果為 110076.7345;
十進制數字 42.6875 轉換成二進制的結果為 101010.1011。
下表列出了前17個十進制整數與二進制、八進制、十六進制的對應關系:
注意,十進制小數轉換成其他進制小數時,結果有可能是一個無限位的小數。請看下面的例子:
十進制0.51對應的二進制為0.100000101000111101011100001010001111010111...,是一個循環小數;
十進制0.72對應的二進制為0.1011100001010001111010111000010100011110...,是一個循環小數;
十進制0.625對應的二進制為0.101,是一個有限小數。