【基礎】進制轉換

 

一、什麼是二進制、八進制、十進制、 十六進制?spa

  咱們日常生活中經常使用的是10進制,就是逢10進1;code

  二進制:逢二進一                由0、1組成;blog

  八進制:逢八進一                由0-7組成;                                      前面以o開頭的數字表示八進制                    在c語言中用%oit

    十進制:逢十進一                由0-9組成;                                                                                                在c語言中用%dio

  十六進制:逢十六進一          由0-15組成,10-15分別對應A-F;         前面以ox開頭的數字表示十六進制                在c語言中用%xclass

 

二、二進制、八進制、十六進制與十進制間的轉換基礎

(1)二進制、八進制、十六進制轉十進制間二進制

 十進制的表達如:(12345)10  =1*104+2*103+3*102+4*101+5*100=12345程序

 八進制轉換爲十進制:(12345)8=1*84+2*83+3*82+4*81+5*80=5349方法

   二進制轉十進制:(10101)2=1*24+0*23+1*22+0*21+1*20=21

 十六進制轉十進制:(1F2A5)16=1*164+15*163+2*162+10*161+5*160=127653

(2)十進制間轉二進制、八進制、十六進制

   十進制轉二進制:用10進制的數一直除以2,直到除數小於2爲止,而後把餘數倒序排列

    25/2 ---------12餘1

    12/2 ---------6餘0

    6/2  ---------3餘0

    3/2  ---------1餘1

     1

 倒序排列獲得(25)10=(11001)2

   十進制轉八進制:同理用10進制的數一直除以8,直到除數小於8爲止,而後把餘數倒序排列

    168/8 ----------16餘0

    16/8   ----------2餘0

      2

   (168)10=(200)8

 十進制轉十六進制:同理用10進制的數一直除以16,直到除數小於16爲止,而後把餘數倒序排列,大於10-15的數字用A-F表示

   127653/16  ----------7978餘5

   7978/16     ----------498餘10      (10用A表示)

   498/16      ------------31餘2

    31/16       ------------1餘15        (15用F表示)

    1

   (127653)10=(1F2A5)16

  補充:用程序實現任一十進制整數轉換爲二進制和十六進制樹(這是我去超圖的機試題,我當時用C#實現的,下面用C語言實現) 

#include<stdio.h>
#include<stdlib.h>
void  toletter(int num)
{
    switch (num)
    {
    case 10:
        printf("%c", 'a'); break;
    case 11:
        printf("%c", 'b'); break;
    case 12:
        printf("%c", 'c'); break;
    case 13:
        printf("%c", 'd'); break;
    case 14:
        printf("%c", 'e'); break;
    case 15:
        printf("%c", 'f'); break;
    default:
        printf("%d", num); break;
    }
}
//十進制轉二進制
void convertto2(int num)
{
    if (num ==1|| num==0)
    {
        printf("%d",num);
    }
    else
    {
      int n=num / 2;
      convertto2(n);
      printf("%d",num %2);
    }


}
//十進制轉八進制
void convertto8(int num)
{
    if (num  < 8)
    {
        printf("%d", num);
    }
    else
    {
        int n = num / 8;
        convertto8(n);
        printf("%d", num % 8);
    }
}
//十進制轉十六進制
void convertto16(int num)
{
    if (num<16)
    {
        toletter(num);
    }
    else
    {
        int n = num / 16;
        convertto16(n );
        toletter(num % 16);
    }

}

void main()
{
    int num;
    printf("請輸入一個整數");
    scanf_s("%d",&num);
    printf("\n十進制轉二進制:");
    convertto2(num);
    printf("\n十進制轉八進制:");
    convertto8(num);
    printf("\n十進制轉十六進制:");
    convertto16(num);
    system("pause");
}

三、二進制與八進制的互相轉換

    二進制表示八進制,二進制用三位(23=8)表示八進制的數,以下:

    二進制                      八進制               

  000                           0

  001                           1

  010                           2

  011                           3

  100                           4

  101                           5

  110                           6

  111                           7

  (1)八進制轉二進制:把每一位八進制的數換爲三位的二進制。以下:

  (123)8= 001 010 011=(1010011)2

      (2)二進制轉八進制:從低位到高位分紅3位爲一組,高位不夠三位的用0補齊,而後替換三位二進制位爲八進制的數。以下:

      (1010011)2= 1 010 011  =   001 010 011=(123 )8

四、二進制與十六進制的互相轉換

      二進制表示十六進制,二進制用四位(24=8)表示十六進制的數,以下:

      二進制            十六進制               二進制            十六進制

   0000                0                      0001                   1

   0010                2                      0011                   3

   0100                4                      0101                   5

   0110                6                      0111                   7

      1000                 8                     1001                   9

      1010                 A                     1011                   B

      1100                 C                     1101                   D

  1110       E        1111                   F

      (1)十六進制轉二進制:把每一位十六進制的數換爲四位的二進制。以下:

      (1A2B3C)16=0001 1010 0010 1011 0011 1100=(110100010101100111100)2

  (2)二進制轉十六進制:從低位到高位分紅4位爲一組,高位不夠4位的用0補齊,而後替換4位二進制位爲十六進制的數。以下:

  (110100010101100111100)2=1 1010 0010 1011 0011 1100=(1A2B3C)16

五、小數的進制轉換

  小數的10進制轉2進制方法:乘以2取整,再順序排列,以下:

  0.625*2 =1.25  取1

  0.25*2=0.5      取0

  0.5*2=1.0        取1

     (0.625)10=(0.101)2

  (0.5)10=(0.01)2

 

【C語言基礎】  

                            

相關文章
相關標籤/搜索