【基础】进制转换

1、什么是二进制、八进制、十进制、 十六进制?

  我们平常生活中常用的是10进制,就是逢10进1;

  二进制:逢二进一                由0、1组成;

  八进制:逢八进一                由0-7组成;                                      前面以o开头的数字表示八进制                    在c语言中用%o

    十进制:逢十进一                由0-9组成;                                                                                                在c语言中用%d

  十六进制:逢十六进一          由0-15组成,10-15分别对应A-F;         前面以ox开头的数字表示十六进制                在c语言中用%x

2、二进制、八进制、十六进制与十进制间的转换

(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("
十进制转二进制:");
    convertto2(num);
    printf("
十进制转八进制:");
    convertto8(num);
    printf("
十进制转十六进制:");
    convertto16(num);
    system("pause");
}

3、二进制与八进制的互相转换

    二进制表示八进制,二进制用三位(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

4、二进制与十六进制的互相转换

      二进制表示十六进制,二进制用四位(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

5、小数的进制转换

  小数的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语言基础】  

                            

原文地址:https://www.cnblogs.com/wangliu/p/4064598.html