C語言中進位之間的想換轉換

來源:互聯網
上載者:User

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的補碼為11111001。然後三位一划

001---->1

111---->157

011---->3

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

補充:

最近有些朋友提了這樣的問題“0.8的十六進位是多少?”

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

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

過程中確實存在麻煩。

就比如“0.8的十六進位”吧!

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

具體方法如下:

0.8*16=12.8

0.8*16=12.8

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.