zoukankan      html  css  js  c++  java
  • 【基础】进制转换

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

                                

  • 相关阅读:
    聚合根、实体、值对象
    哀悼的CSS 把网站变成灰色
    Ubuntu13.04更换aptget源
    JS判断用户终端,跳转到不同的页面.
    分享一个使用的FireFox 截图插件小巧方便
    Linux 下面FireFox 看CCTV直播
    Ubuntu 11.10后 Guest账户禁用!
    修改Ubuntu的启动画面plymouth
    ubuntu开机自启动小键盘
    Linux 用cat做图片种子||Windows 用copy做图片种子
  • 原文地址:https://www.cnblogs.com/wangliu/p/4064598.html
Copyright © 2011-2022 走看看