C語言中的各種進製轉換

2021-06-27 16:37:04 字數 4472 閱讀 2817

一、正數

1. 十 -------> 二

2. 二 -------> 十

3. 十 -------> 八

4. 八 -------> 十

6. 十六------> 十 

二、負數

正文:一、正數

在高速發展的現代社會,計算機浩浩蕩蕩地成為了人們生活中不可缺少的一部分,幫助人們解決通訊,聯絡,互動等各方面的問題。今天我就給大家講講與計算機有關的「進製轉換」問題。 

我們以(25.625)(十)為例講解一下進製之間的轉化問題 

說明:小數部份的轉化計算機二級是不考的,有興趣的人可以看一看 

1. 十 -----> 二

(25.625)(十) 

整數部分:

25/2=12......1

12/2=6 ......0

6/2=3 ......0

3/2=1 ......1

1/2=0 ......1

然後我們將餘數按從下往上的順序書寫就是:11001,那麼這個11001就是十進位制25的二進位制形式 

小數部分:

0.625*2=1.25

0.25 *2=0.5

0.5 *2=1.0

然後我們將整數部分按從上往下的順序書寫就是:101,那麼這個101就是十進位制0.625的二進位制形式 

所以:(25.625)(十)=(11001.101)(二) 

十進位制轉成二進位制是這樣: 

把這個十進位制數做二的整除運算,並將所得到的餘數倒過來. 

例如將十進位制的10轉為二進位制是這樣: 

(1) 10/2,商5餘0;  

(2) 5/2,商2餘1; 

(3)2/2,商1餘0;  

(4)1/2,商0餘1.  

(5)將所得的餘數侄倒過來,就是1010,所以十進位制的10轉化為二進位制就是1010  

2. 二 ----> 十 

(11001.101)(二) 

整數部分: 下面的出現的2(x)表示的是2的x次方的意思

1*2(4)+1*2(3)+0*2(2)+0*2(1)+1*2(0)=25 

小數部分:  

1*2(-1)+0*2(-2)+1*2(-3)=0.625 

所以:(11001.101)(二)=(25.625)(十) 

二進位制轉化為十進位制是這樣的:  

這裡可以用8421碼的方法.這個方法是將你所要轉化的二進位制從右向左數,從0開始數(這個數我們叫n),在位數是1的地方停下,並將1乘以2的n次方,最後將這些1乘以2的n次方相加,就是這個二進數的十進位制了.  

還是舉個例子吧:  

求110101的十進位制數.從右向左開始了  

(1) 1乘以2的0次方,等於1;  

(2) 1乘以2的2次方,等於4;  

(3) 1乘以2的4次方,等於16;  

(4) 1乘以2的5次方,等於32; 

(5) 將這些結果相加:1+4+16+32=53 

3. 十 ----> 八

(25.625)(十) 

整數部分: 

25/8=3......1 

3/8 =0......3 

然後我們將餘數按從下往上的順序書寫就是:31,那麼這個31就是十進位制25的八進位制形式 

小數部分: 

0.625*8=5 

然後我們將整數部分按從上往下的順序書寫就是:5,那麼這個0.5就是十進位制0.625的八進位制形式 

所以:(25.625)(十)=(31.5)(八)

4. 八 ----> 十 

(31.5)(八) 

整數部分: 

3*8(1)+1*8(0)=25  

小數部分:

5*8(-1)=0.625

所以(31.5)(八)=(25.625)(十)

5. 十 ----> 十六

(25.625)(十)

整數部分:

25/16=1......9

1/16 =0......1

然後我們將餘數按從下往上的順序書寫就是:19,那麼這個19就是十進位制25的十六進製制形式

小數部分:

0.625*16=10(即十六進製制的a或a) 

然後我們將整數部分按從上往下的順序書寫就是:a,那麼這個a就是十進位制0.625的十六進製制形式 

所以:(25.625)(十)=(19.a)(十六) 

6. 十六----> 十

(19.a)(十六)

整數部分:

1*16(1)+9*16(0)=25

小數部分:

10*16(-1)=0.625 

所以(19.a)(十六)=(25.625)(十) 

如何將帶小數的二進位制與八進位制、十六進製制數之間的轉化問題

我們以(11001.101)(二)為例講解一下進製之間的轉化問題

說明:小數部份的轉化計算機二級是不考的,有興趣的人可以看一看 

1. 二 ----> 八

(11001.101)(二) 

整數部分: 從後往前每三位一組,缺位處用0填補,然後按十進位制方法進行轉化, 則有: 

001=1 

011=3

然後我們將結果按從下往上的順序書寫就是:31,那麼這個31就是二進位制11001的八進位制形式

小數部分: 從前往後每三位一組,缺位處用0填補,然後按十進位制方法進行轉化, 則有: 

101=5

然後我們將結果部分按從上往下的順序書寫就是:5,那麼這個5就是二進位制0.101的八進位制形式

所以:(11001.101)(二)=(31.5)(八)

2. 八 ----> 二

(31.5)(八) 

整數部分:從後往前每一位按十進位制轉化方式轉化為三位二進位制數,缺位處用0補充 則有:

1---->1---->001

3---->11

然後我們將結果按從下往上的順序書寫就是:11001,那麼這個11001就是八進位制31的二進位制形式

小數部分:從前往後每一位按十進位制轉化方式轉化為三位二進位制數,缺位處用0補充 則有:

5---->101

然後我們將結果按從下往上的順序書寫就是:101,那麼這個101就是八進位制5的二進位制形式

所以:(31.5)(八)=(11001.101)(二)

3. 十六 ----> 二

(19.a)(十六)

整數部分:從後往前每位按十進位制轉換成四位二進位制數,缺位處用0補充 則有:

9---->1001

1---->0001(相當於1)

則結果為00011001或者11001 

小數部分:從前往後每位按十進位制轉換成四位二進位制數,缺位處用0補充 則有:

a(即10)---->1010

所以:(19.a)(十六)=(11001.1010)(二)=(11001.101)(二)

4. 二 ----> 十六

(11001.101)(二)

整數部分:從後往前每四位按十進位制轉化方式轉化為一位數,缺位處用0補充 則有: 

1001---->9

0001---->1

則結果為19

小數部分:從前往後每四位按十進位制轉化方式轉化為一位數,缺位處用0補充 則有:

1010---->10---->a

則結果為a

所以:(11001.101)(二)=(19.a)(十六)二、負數

負數的進製轉換稍微有些不同。

先把負數寫為其補碼形式(在此不議),然後再根據二進位制轉換其它進製的方法進行。

例:要求把-9轉換為八進位制形式。則有:

-9的補碼為11110111。然後三位一劃

111---->7 

110---->6

011---->3

然後我們將結果按從下往上的順序書寫就是:367,那麼367就是十進位制數-9的八進位制形式。  

補充:最近有些朋友提了這樣的問題「0.8的十六進製制是多少?」

我想在我的空間裡已經有了詳細的講解,為什麼他還要問這樣的問題那 

於是我就動手算了一下,發現0.8、0.6、0.2... ...一些數字在進製之間的轉化

過程中確實存在麻煩。

就比如「0.8的十六進製制」吧!

無論你怎麼乘以16,它的餘數總也乘不盡,總是餘8

具體方法如下:

0.8*16=12.8 

0.8*16=12.8  

.  取每乙個結果的整數部分為12既十六進製制的c  

如果題中要求精確到小數點後3位那結果就是0.ccc  

如果題中要求精確到小數點後4位那結果就是0.cccc  

現在ok了,我想我的朋友再也不會因為進製的問題煩愁了!  

下面是將十進位制數轉換為負r進製的公式: 

n=(dmdm-1...d1d0)-r 

=dm*(-r)^m+dm-1*(-r)^m-1+...+d1*(-r)^1+d0*(-r)^0 

15=1*(-2)^4+0*(-2)^3+0*(-2)^2+1*(-2)^1+1*(-2)^0 

=10011(-2) 

其實轉化成任意進製都是一樣的

**

C語言中的進製轉換 itoa sprintf

在c語言中經常會遇到將二進位制 八進位制 十進位制 十六進製制等之間的相互轉換,比如 在將八進位制以二進位制的形式列印出來等。可以用c語言 stdlib.h 中的itoa函式來做這件事情。char itoa int value,char string,int radix 例如 int i char ...

c語言中的各種「零」

在 語言中,存在各種各樣的 零 例如 0 null等。下面我們就具體介紹一下這些 零 零值意義備註0 整型資料的0 0.0實型資料的0 null 指標型資料的0 記憶體的0位址,用於初始化暫時不用的指標。或是標識已經被釋放堆記憶體的指標。0 轉義字元型 ascii值為0 非可列印字元,用於標識字串結...

各種進製的轉換

請看這下面二段 10進製 2進製 string a 1195 輸入數值 biginteger src new biginteger a 轉換為biginteger型別 system.out.println src.tostring 2 轉換為2進製並輸出結果 2進製 10進製 string a 10...