进制转换_进制转换器 - CSDN
进制转换 订阅
进制转换是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。位权是指,进位制中每一固定位置对应的单位值。 展开全文
进制转换是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。位权是指,进位制中每一固定位置对应的单位值。
信息
中文名
进制转换
基    数
进位计数制中所采用的数码的个数
基本解释
人们利用符号来计数的方法
基本因素
基数和位权
进制转换进制转换本质
我们知道十进制转换成二进制用短除法,但是为什么用短除法呢?请往下看。“数制”只是一套符号系统来表示指称“量”的多少。我们用“1”这个符号来表示一个这一“量”的概念。自然界的“量”是无穷的,我们不可能为每一个“量”都造一个符号,这样的系统没人记得住。所以必须用有限的符号按一定的规律进行排列组合来表示这无限的“量”。符号是有限的,这些符号按照某种规则进行排列组合的个数是无限的。十进制是10个符号的排列组合,二进制是2个符号的排列组合。在进行进制转换时有一基本原则:转换后表达的“量”的多少不能发生改变。二进制中的111个苹果和十进制中的7个苹果是一样多的。十进制中的数位排列是这样的…… 万 千 百 十 个 十分 百分 千分……R进制中的数位排列是这样的……R^4 R^3R^2 R^1 R^0 R^-1 R^-2 R^-3……可以看出相邻的数位间相差进制的一次方。以下部分来源:知乎网友进制这事儿,说到底就是位值原理,即:同一个数字,放在不同的数位上,代表不同大小的“量”。例如:十进制中,百位上的1表示100,十位上的1表示10。任何进制中,每个数都可以按位权展开成各个数位上的数字乘以对应数位的位权,再相加的形式,如:  十进制的123=1×100+2×10+3×1  十进制的9876=9×1000+8×100+7×10+6×1  问:为啥相应的数位是1000、100、10、1?为啥不是4、3、2、1?答:十进制,满十进一,再满十再进一,因此要想进到第三位,得有10×10;第4位得有10×10×10这样我们就知道了:对10进制,从低位到高位,依次要乘以10^0,10^1,10^2,10^3……,也就是1、10、100、1000  对2进制,从低位到高位,依次要乘以2^0,2^1,2^2,2^3……,也就是1、2、4、8、……  下面我们开始转换进制(以十进制换成二进制为例):  原来十进制咱们的数位叫 千位、百位、十位……  现在二进制数位变成了八位、四位、二位……  模仿上面十进制按位权展开的方式,把二进制数1011按权展开: 1011=1×2^3+0×2^2+1×2^1+1×2^0=1×8+0×4+1×2+1×1=8+2+1=11  接下来我们进行十进制往二进制的转换:  比较小的数,直接通过拆分就可以转换回去  比如13,我们把数位摆好八位、四位、二位,不能写十六了,因为一旦“十六”那个数位上的符号是“1”,那就表示有1个16,即便后面数位上的符号全部是“0”,把这个二进制数按权位展开后,在按照十进制的运算规律计算,得到的数也大于13了。那最多就只能包含“八”这个数位。 13-8=5,5当中有4,5-4=1  好啦,我们知道13=1*8+1*4+0*2+1*1 把“1”、“1”、“0”“1”这几个符号放到数位上去:八位、四位、二位、一位  1 1 0 1  于是十进制数13=二进制数1101  现在你按照书上说的短除法来试试,会发现它和你凑数得到的结果刚好是一样的,为什么短除法可以实现进制的转换呢?为什么每次要除以进制呢?为什么要把余数倒着排列呢?  想要知道其中的道理的话,请仔细品味以下的递归原理(不知道递归没关系):  (1)一个十进制数321的末尾是1,意味着一定是……+1,省略号部分一定是10的倍数,所以一个十进制数末尾是1意味着十进制数除以进制10一定余1。所以第一次除以10之后的余数,应该放在十进制的最后一个数位“个位”,也就是说个位上的符号是1。类比,一个二进制数111(注意,数值不等于上面十进制的111)末尾是1,意味着一定是……+1,前面的省略号部分都是2的倍数。所以一个二进制数末尾是1,意味着它对应的十进制数除以进制2一定余1。所以第一次除以2之后的余数,应该放在二进制的最后一个数位“一位”,也就是说一位上的符号是1。(2)如果一个十进制数321“十位”是2,我们希望把它转换为(1)的情况。那么我们把这个十进制数的末尾抹掉,也就是减去“个位”上的1,再除以进制10,得到32。这样原来“十位”上的“2”就掉到了“个位”上。再把32做(1)的处理。类比,如果一个二进制数111“二位”是1,我们希望把它转换为(1)的情况,那么我们把这个二进制数的末尾抹掉,也就是减去“一位”上的1,再除以进制2,得到11。这样原来“二位”上的“1”就掉到了“一位”上。再把11做(1)的处理。总结:其实这个过程就是把各个数位上的符号求出来的过程。现在你应该可以回答以下问题了:为什么短除法可以实现进制的转换呢?为什么每次要除以进制呢?为什么要把余数倒着排列呢?R进制转换成十进制就是按权位展开,把展开式放到十进制下,再按照“十进制”的运算规律计算。因为是十进制,所以就允许使用2、3、4、5、6、7、8、9了。所以2的n次方就不用写成指数,而可以用另外的八个符号来表示了。十进制--->二进制对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。 对于小数部分,采用连续乘以基数2,并依次取出的整数部分,直至结果的小数部分为0为止。故该法称“乘基取整法”。给你一个十进制,比如:6,如果将它转换成二进制数呢?10进制数转换成二进制数,这是一个连续除以2的过程:把要转换的数,除以2,得到商和余数,将商继续除以2,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。听起来有些糊涂?结合例子来说明。比如要转换6为二进制数。“把要转换的数,除以2,得到商和余数”。那么: 要转换的数是6, 6 ÷ 2,得到商是3,余数是0。“将商继续除以2,直到商为0……”现在商是3,还不是0,所以继续除以2。那就: 3 ÷ 2, 得到商是1,余数是1。“将商继续除以2,直到商为0……”现在商是1,还不是0,所以继续除以2。那就: 1 ÷ 2, 得到商是0,余数是1“将商继续除以2,直到商为0……最后将所有余数倒序排列”好极!现在商已经是0。我们三次计算依次得到余数分别是:0、1、1,将所有余数倒序排列,那就是:110了!6转换成二进制,结果是110。把上面的一段改成用表格来表示,则为:(在计算机中,÷用 / 来表示)二进制--->十进制二进制数转换为十进制数二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……所以,设有一个二进制数:0110 0100,转换为10进制为:下面是竖式:0110 0100 换算成十进制从右往左开始换算第0位 0 * 20 = 0第1位 0 * 21 = 0第2位 1 * 22 = 4第3位 0 * 23 = 0第4位 0 * 24 = 0第5位 1 * 25 = 32第6位 1 * 26 = 64第7位 0 * 27 = 0公式:第N位2(N)---------------------------100用横式计算为:0 * 20 + 0 * 21 + 1 * 22 + 0 * 23 + 0 * 24 + 1 * 25 + 1* 26 + 0 * 27 = 100除0以外的数字0次方都是1,但0乘以多少都是0,所以我们也可以直接跳过值为0的位:1 * 22 + 1 * 25 +1*26 = 100十进制--->八进制10进制数转换成8进制的方法,和转换为2进制的方法类似,唯一变化:除数由2变成8。来看一个例子,如何将十进制数120转换成八进制数。用表格表示:120转换为8进制,结果为:170。八进制--->十进制八进制就是逢8进1。八进制数采用 0~7这八数来表达一个数。八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……所以,设有一个八进制数:1507,转换为十进制为:用竖式表示:1507换算成十进制。第0位 7 * 80 = 7第1位 0 * 81 = 0第2位 5 * 82 = 320第3位 1 * 83 = 512--------------------------839同样,我们也可以用横式直接计算:7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839结果是,八进制数 1507 转换成十进制数为 839十进制--->十六进制10进制数转换成16进制的方法,和转换为2进制的方法类似,唯一变化:除数由2变成16。同样是120,转换成16进制则为:120转换为16进制,结果为:78。十六进制--->十进制16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。字母不区分大小写。十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。假设有一个十六进数 2AF5, 那么如何换算成10进制呢?用竖式计算:2AF5换算成10进制:第0位: 5 * 160 = 5第1位: F * 161 = 240第2位: A * 162 = 2560第3位: 2 * 163 = 8192-------------------------------------10997直接计算就是:5 * 160 + F * 161 + A * 162 + 2 * 163 = 10997(别忘了,在上面的计算中,A表示10,而F表示15)现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。假设有人问你,十进数 1234 为什么是 一千二百三十四?你尽可以给他这么一个算式:1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100二进制--->八进制(11001.101)(二)整数部分: [1]  从后往前每三位一组,缺位处用0填补,然后按十进制方法进行转化, 则有:001=1011=3然后我们将结果按从下往上的顺序书写就是:31,那么这个31就是二进制11001的八进制形式八进制--->二进制(31.5)(八)整数部分:从后往前每一位按十进制转化方式转化为三位二进制数,缺位处用0补充 则有:1---->1---->0013---->11然后我们将结果按从下往上的顺序书写就是:11001,那么这个11001就是八进制31的二进制形式二进制--->十六进制二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。我们也一样,只要学完这一小节,就能做到。首先我们来看一个二进制数:1111,它是多少呢?你可能还要这样计算:1 * 20 + 1 * 21 + 1 * 22 + 1 * 23 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8、4、2、1。即,最高位的权值为23 = 8,然后依次是 22 = 4,21=2, 20 = 1。记住8421,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。下面列出四位二进制数xxxx 所有可能的值(中间略过部分)二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。如:十六进制--->二进制反过来,当我们看到 FD时,如何迅速将它转换为二进制数呢?先转换F:看到F,我们需知道它是15(可能你还不熟悉A~F这六个数),然后15如何用8421凑呢?应该是8 + 4 + 2 + 1,所以四位全为1 :1111。接着转换 D:看到D,知道它是13,13如何用8421凑呢?应该是:8 + 4 + 1,即:1101。所以,FD转换为二进制数,为: 1111 1101由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。比如,十进制数 1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得到16进制数:结果16进制为: 0x4D2然后我们可直接写出0x4D2的二进制形式: 0100 1101 0010。其中对映关系为:0100 -- 41101 -- D0010 -- 2同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。下面举例一个int类型的二进制数:01101101 11100101 10101111 00011011我们按四位一组转换为16进制: 6D E5 AF 1B再转换为10进制:6*167+D*166+E*165+5*164+A*163+F*162+1*161+B*160=1,843,769,115十进制--->负进制下面是将十进制数转换为负R进制的公式:N=(dmdm-1...d1d0)-R=dm*(-R)m+dm-1*(-R)m-1+...+d1*(-R)1+d0*(-R)015=1*(-2)4+0*(-2)3+0*(-2)2+1*(-2)1+1*(-2)0=10011(-2)
收起全文
  • 进制转换 原理 进制转换是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。 基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。 位权是指...

    进制转换

        

    原理

    进制转换是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。

    基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。

     位权是指,进位制中每一固定位置对应的单位值。

     在知乎有个问题下的解答很不错,可以参考:打开链接

    他们之间的关系如下:

    wpsC01D.tmp

     

    接下来我们一一阐述。

    一:(二,八,十六进制)转十进制

     

    方法:假设我们要将n进制转换为十进制,首先我们从n进制的右边为第一位数(从低位到高位),其权值是n的0次方,第二位是n的1次方,依次递增下去,把最后的结果相加的值就是十进制的值了。

     

    举个例子:将(1101)n  转换为十进制

    (1101)n  =  1*(n)^3  + 1 * (n) ^ 2  +  0 * (n) ^ 1 + 0 * (n) ^ 0 ;

    如:(1101) 2  =  1*(2)^3  + 1 * (2) ^ 2  +  0 * (2) ^ 1 + 1 * (2) ^ 0  =  13;

    八进制,十六进制同样如此。

    例:将十六进制的(2B)H转换为十进制的步骤如下:

    1. 第0位 B x 16^0 = 11;

    2. 第1位 2 x 16^1 = 32;

    3. 读数,把结果值相加,11+32=43,即(2B)H=(43)D。

     

    二:十进制 转换为(二,八,十六进制)

     

    假设我们要将十进制转换为n进制

    方法:除n取余法,即每次将整数部分除以n,余数为该位权上的数,而商继续除以n,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。

    十进制转换二进制

     

    例:将十进制的(796)D转换为十六进制的步骤如下:

    1. 将商796除以16,商49余数为12,对应十六进制的C;

    2. 将商49除以16,商3余数为1;

    3. 将商3除以16,商0余数为3;

    4. 读数,因为最后一位是经过多次除以16才得到的,因此它是最高位,读数字从最后的余数向前读,31C,即(796)D=(31C)H。

    下面转载自https://www.cnblogs.com/gaizai/p/4233780.html

    (三) (二进制) ↔ (八、十六进制)

    wpsC044.tmp

    (Figure9:二进制转换为其它进制)

    • 二进制 → 八进制

      方法:取三合一法,即从二进制的小数点为分界点,向左(向右)每三位取成一位,接着将这三位二进制按权相加,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的八进制数。如果向左(向右)取三位后,取到最高(最低)位时候,如果无法凑足三位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足三位。

      例:将二进制的(11010111.0100111)B转换为八进制的步骤如下:

    1. 小数点前111 = 7;

    2. 010 = 2;

    3. 11补全为011,011 = 3;

    4. 小数点后010 = 2;

    5. 011 = 3;

    6. 1补全为100,100 = 4;

    7. 读数,读数从高位到低位,即(11010111.0100111)B=(327.234)O。

    wpsC054.tmp

    (Figure10:图解二进制 → 八进制)

    二进制与八进制编码对应表:

    二进制

    八进制

    000

    0

    001

    1

    010

    2

    011

    3

    100

    4

    101

    5

    110

    6

    111

    7

     

    • 八进制 → 二进制

      方法:取一分三法,即将一位八进制数分解成三位二进制数,用三位二进制按权相加去凑这位八进制数,小数点位置照旧。

      例:将八进制的(327)O转换为二进制的步骤如下:

    1. 3 = 011;

    2. 2 = 010;

    3. 7 = 111;

    4. 读数,读数从高位到低位,011010111,即(327)O=(11010111)B。

    wpsC055.tmp

    (Figure11:图解八进制 → 二进制)

    • 二进制 → 十六进制

      方法:取四合一法,即从二进制的小数点为分界点,向左(向右)每四位取成一位,接着将这四位二进制按权相加,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的十六进制数。如果向左(向右)取四位后,取到最高(最低)位时候,如果无法凑足四位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足四位。

      例:将二进制的(11010111)B转换为十六进制的步骤如下:

    1. 0111 = 7;

    2. 1101 = D;

    3. 读数,读数从高位到低位,即(11010111)B=(D7)H。

    wpsC056.tmp

    (Figure12:图解二进制 → 十六进制)

    • 十六进制 → 二进制

      方法:取一分四法,即将一位十六进制数分解成四位二进制数,用四位二进制按权相加去凑这位十六进制数,小数点位置照旧。

      例:将十六进制的(D7)H转换为二进制的步骤如下:

    1. D = 1101;

    2. 7 = 0111;

    3. 读数,读数从高位到低位,即(D7)H=(11010111)B。

    wpsC057.tmp

    (Figure13:图解十六进制 → 二进制)

    (四) (八进制) ↔ (十六进制)

    wpsC058.tmp

    (Figure14:八进制与十六进制之间的转换)

    • 八进制 → 十六进制

      方法:将八进制转换为二进制,然后再将二进制转换为十六进制,小数点位置不变。

      例:将八进制的(327)O转换为十六进制的步骤如下:

    1. 3 = 011;

    2. 2 = 010;

    3. 7 = 111;

    4. 0111 = 7;

    5. 1101 = D;

    6. 读数,读数从高位到低位,D7,即(327)O=(D7)H。

    wpsC069.tmp

    (Figure15:图解八进制 → 十六进制)

    • 十六进制 → 八进制

      方法:将十六进制转换为二进制,然后再将二进制转换为八进制,小数点位置不变。

      例:将十六进制的(D7)H转换为八进制的步骤如下:

    1. 7 = 0111;

    2. D = 1101;

    3. 0111 = 7;

    4. 010 = 2;

    5. 011 = 3;

    6. 读数,读数从高位到低位,327,即(D7)H=(327)O。

    wpsC06A.tmp

    扩展

    负数的进制转换稍微有些不同。

    先把负数写为其补码形式(在此不议),然后再根据二进制转换其它进制的方法进行。

    包含小数的进制换算:

    (ABC.8C)H=10x16^2+11x16^1+12x16^0+8x16^-1+12x16^-2

    =2560+176+12+0.5+0.046875

    =(2748.546875)D

    代码

    下面代码来源百科(懒~)

    十进制转换k进制

    #include<cstdio>
    #include<iostream>
    #include<ctime>
    char a[1000];
    using namespace std;
    int main()
    {
        int y=0,k,n,x;
        char z='A';
        scanf ("%d %d",&n,&x);
        while (n!=0)
        {   
              y++;
                 a[y]=n%x;
              n=n/x;
              if (a[y]>9) a[y]=z+(a[y]-10); 
              else a[y]=a[y]+'0';
        }
        for (int i=y;i>0;i--)
        printf ("%c",a[i]);
        return 0;
    }

    m进制转换十进制

    #include<cstdio>
    #include<iostream>
    #include<cstdlib>
    #include<cstring>
    char a[10000];
    using namespace std;
    int main()
    {
       int n,m;
       int f=0;
       scanf ("%s%d",a,&m);
       for (int i=0;i<strlen(a);i++)
       {
            f*=m;
            if (a[i]=='A'||a[i]=='B'||a[i]=='C'||a[i]=='D'||a[i]=='E'||a[i]=='F')
            {
                f=f+(a[i]-'A'+10);
            }
            else
            {
                f=f+(a[i]-'0');
            }
       }
       printf ("%d",f);
       return 0;
    }

    注:用C语言的格式化输入输出可以快速转换10进制,8进制和16进制。例子:10进制转16进制:

    #include <cstido>
     
    int main()
    {
        int a;
        scanf("%d",&a);
        printf("%x",a);
        return 0;
    }

    花费不少时间总结在一起了,望有用。

    展开全文
  • C语言实现进制转换

    2018-08-24 19:25:39
    1、十进制转换二进制 2、十进制转换八进制 3、十进制转换十六进制 4、二进制转换十进制 5、八进制转换十进制 6、十六进制转换十进制 0、 退 出 代码实现: #include&lt;stdio.h&gt; #include&...

    基本功能:
    1、十进制转换二进制
    2、十进制转换八进制
    3、十进制转换十六进制
    4、二进制转换十进制
    5、八进制转换十进制
    6、十六进制转换十进制
    0、 退 出

    代码实现:

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    
    void mune()
    {
        printf("******************************************************\n");
        printf("**                                                  **\n");
        printf("**                   进制转换                       **\n");
        printf("**                                                  **\n");
        printf("**              1、十进制转换二进制                 **\n");
        printf("**              2、十进制转换八进制                 **\n");
        printf("**              3、十进制转换十六进制               **\n");
        printf("**              4、二进制转换十进制                 **\n");
        printf("**              5、八进制转换十进制                 **\n");
        printf("**              6、十六进制转换十进制               **\n");
        printf("**              0、    退     出                    **\n");
        printf("**                                                  **\n");
        printf("******************************************************\n");
    }
    
    void TenToTwo()
    {
        int num,m, c, i = 0;
        int n = 2;
        int a[32];
        printf("输入一个整数:");
        scanf("%d", &num);
        m = num;
        while (num>0)
        {
            c = (num % n);
            a[i] = c;
            num = num / n;
            i++;
        }
        printf("十进制数%d转换成二进制数是:", m);
        for (i--; i >= 0; i--)           //将数组倒序输出
            printf("%d", a[i]);
        printf("\n");
    }
    
    void TenToEight()
    {
        int num, m, c, i = 0;
        int n = 8;
        int a[32];
        printf("输入一个整数:");
        scanf("%d", &num);
        m = num;
        while (num>0)
        {
            c = (num % n);
            a[i] = c;
            num = num / n;
            i++;
        }
        printf("十进制数%d转换成八进制数是:", m);
        for (i--; i >= 0; i--)           //将数组倒序输出
            printf("%d", a[i]);
        printf("\n");
    }
    
    void TenToSixteen()
    {
            char arr[] = "0123456789ABCDEF";
            char hex[16];
            int i = 0;
            int j = 0;
            int num = 0,a = 0;
            printf("输入一个整数:");
            scanf("%d", &num);
            a = num;
            while (num)
            {
                hex[i++] = arr[num % 16];   //对十进制数求余并最终与hextable数组中的字符匹配
                num = num / 16;
            }
            printf("十进制数%d转换成十六进制数是:", a);
            for (j = i - 1; j >= 0; --j)
                printf("%c", hex[j]);
            printf("\n");
    }
    
    void TwoToTen()
    {   
            long long n,a;
            int sum = 0, i = 0, m;
            printf("输入一个二进制数: ");
            scanf("%lld", &n);
            a = n;
            while (n != 0)
            {
                m = n % 10;
                n /= 10;
                sum += m*pow(2, i);
                ++i;
            }
            printf("二进制数 %lld 转换为十进制为 %d\n", a, sum);
    }
    
    void EightToTen()
    {
        int n, a;
        int sum = 0, i = 0, m;
        printf("输入一个八进制数: ");
        scanf("%d", &n);
        a = n;
        while (n != 0)
        {
            m = n % 10;
            n /= 10;
            sum += m*pow(8, i);
            ++i;
        }
        printf("八进制数 %d 转换为十进制为 %d\n", a, sum);
    }
    
    void SixteenToTen()
    {
        int num = 0;
        printf("输入一个十六进制数: ");
        scanf("%x", &num);
        printf("十六进制数 %x 转换为十进制为 %d\n", num, num);
    }
    
    int main()
    {
        int n = 0;
        while (1)
        {
            mune();
            printf("请选择:");
            scanf("%d", &n);
            switch (n)
            {
            case 1:TenToTwo();
                break;
            case 2:TenToEight();
                break;
            case 3:TenToSixteen();
                break;
            case 4:TwoToTen();
                break;
            case 5:EightToTen();
                break;
            case 6:SixteenToTen();
                break;
            case 0:
                exit(0);
                break;
            default:
                printf("您的选择错误!!!\n");
                break;
            }
        }
    }

    运行结果:
    这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述

    展开全文
  • 1.十进制、二进制、八进制、十六进制对应数值如下表。 进制换算表 十进制进制进制 十六进制 0 0 0 0 1 1 1 1 2 10 2 2 3 11 3 3 4 100 4 ...

    1.十进制、二进制、八进制、十六进制对应数值如下表。

     

    进制换算表
    十进制 二进制 八进制 十六进制
    0 0 0 0
    1 1 1 1
    2 10 2 2
    3 11 3 3
    4 100 4 4
    5 101 5 5
    6 110 6 6
    7 111 7 7
    8 1000 10 8
    9 1001 11 9
    10 1010 12 A
    11 1011 13 B
    12 1100 14 C
    13 1101 15 D
    14 1110 16 E
    15 1111 17 F

    2.进制之间转换的规律(二进制不考虑符号位)

           2.1二进制向十进制转换的时候,可以从二进制右侧往左进行推算,具体步骤如下:

               

    二进制转十进制
    二进制位 ... 0 0 0 0 0 0 0 0
    对应十进制 2n次方 128 64 32 16 8 4 2 1

                 ① 二进制位对应的数字乘以十进制对应数

                 ②将相乘所得数字相加即可得十进制树

               例如:二进制  101010,从右往左推算 0*1+1*2+0*4+1*8+0*16+1*32=42

                                  


           2.2二进制向八进制转换的时候,可以从二进制右侧往左进行推算3位一组,具体步骤如下:


                                   

                         例如:二进制  1101010,从右往左 可分为3组,不足一组左侧补0 

                                                    001      101     010

                                      

            2.3二进制向十六进制转换的时候,可以从二进制右侧往左进行推算4位一组,具体步骤如下:


                                      

                      例如:二进制  1101010,从右往左 可分为3组,不足一组左侧补0 

                                                      0110     1010

                                        

    以上运算可互为逆运算

    十进制转八进制、十六进制时,可采用短除法,也可先转换为二进制再分组,转换为八进制和十六进制。

    所有进制之间转换都可先进行二进制转换,再进行其他运算,比如八进制转十六进制

                         

     

     

     

     

    展开全文
  • 进制转换算法(转)

    2018-05-16 11:49:23
    来源-作者@speedboy007&...本文所涉及的内容(Contents)本文所涉及的内容(Contents)背景(Contexts)进制转换算法(Convert)(二、八、十六进制) → (十进制)二进制 → 十进制八进制 → 十进制十...

    来源-作者@speedboy007&https://blog.csdn.net/meegomeego/article/details/49948241

    建议读者阅读原文,确保获得完整的信息。

    一.本文所涉及的内容(Contents)

    1. 本文所涉及的内容(Contents)
    2. 背景(Contexts)
    3. 进制转换算法(Convert)
      1. (二、八、十六进制) → (十进制)
        1. 二进制 → 十进制
        2. 八进制 → 十进制
        3. 十六进制 → 十进制
      2. (十进制) → (二、八、十六进制)
        1. 十进制 → 二进制
        2. 十进制 → 八进制
        3. 十进制 → 十六进制
      3. (二进制) ↔ (八、十六进制)
        1. 二进制 → 八进制
        2. 八进制 → 二进制
        3. 二进制 → 十六进制
        4. 十六进制 → 二进制
      4. (八进制) ↔ (十六进制)
        1. 八进制 → 十六进制
        2. 十六进制 → 八进制
    4. 扩展阅读
    5. 参考文献(References)

    二.背景(Contexts)

      之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于二、八、十、十六进制转换的计算公式的,进制之间的转换是很基础的知识,但是我发现网络上没有一篇能把它说的清晰、简单、易懂的文章,所以我才写这篇文章的念头,希望能让你再也不用担心、害怕进制之间的转换了。

      下面是二、八、十、十六进制之间关系的结构图:

    wpsC01D.tmp

    (Figure1:进制关系结构图)

    下文会分4个部分对这个图进行分解,针对每个部分会以图文的形式进行讲解:

    1. (二、八、十六进制) → (十进制);
    2. (十进制) → (二、八、十六进制);
    3. (二进制) ↔ (八、十六进制);
    4. (八进制) ↔ (十六进制);

    三.进制转换算法(Convert)

      在数字后面加上不同的字母来表示不同的进位制。B(Binary)表示二进制,O(Octal)表示八进制,D(Decimal)或不加表示十进制,H(Hexadecimal)表示十六进制。例如:(101011)B=(53)O=(43)D=(2B)H

    (一) (二、八、十六进制) → (十进制)

    wpsC01E.tmp

    (Figure2:其他进制转换为十进制)

    • 二进制 → 十进制

      方法:二进制数从低位到高位(即从右往左)计算,第0位的权值是2的0次方,第1位的权值是2的1次方,第2位的权值是2的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。

      例:将二进制的(101011)B转换为十进制的步骤如下:

    1. 第0位 1 x 2^0 = 1;

    2. 第1位 1 x 2^1 = 2;

    3. 第2位 0 x 2^2 = 0;

    4. 第3位 1 x 2^3 = 8;

    5. 第4位 0 x 2^4 = 0;

    6. 第5位 1 x 2^5 = 32;

    7. 读数,把结果值相加,1+2+0+8+0+32=43,即(101011)B=(43)D。

    • 八进制 → 十进制

      方法:八进制数从低位到高位(即从右往左)计算,第0位的权值是8的0次方,第1位的权值是8的1次方,第2位的权值是8的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。

      八进制就是逢8进1,八进制数采用 0~7这八数来表达一个数。

      例:将八进制的(53)O转换为十进制的步骤如下:

    1. 第0位 3 x 8^0 = 3;

    2. 第1位 5 x 8^1 = 40;

    3. 读数,把结果值相加,3+40=43,即(53)O=(43)D。

    • 十六进制 → 十进制

      方法:十六进制数从低位到高位(即从右往左)计算,第0位的权值是16的0次方,第1位的权值是16的1次方,第2位的权值是16的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。

      十六进制就是逢16进1,十六进制的16个数为0123456789ABCDEF。

      例:将十六进制的(2B)H转换为十进制的步骤如下:

    1. 第0位 B x 16^0 = 11;

    2. 第1位 2 x 16^1 = 32;

    3. 读数,把结果值相加,11+32=43,即(2B)H=(43)D。

    (二) (十进制) → (二、八、十六进制)

    wpsC01F.tmp

    (Figure3:十进制转换为其它进制)

    • 十进制 → 二进制

      方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。 

      例:将十进制的(43)D转换为二进制的步骤如下:

    1. 将商43除以2,商21余数为1;

    2. 将商21除以2,商10余数为1;

    3. 将商10除以2,商5余数为0;

    4. 将商5除以2,商2余数为1;

    5. 将商2除以2,商1余数为0; 

    6. 将商1除以2,商0余数为1; 

    7. 读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,101011,即(43)D=(101011)B。

    wpsC02F.tmp

    (Figure4:图解十进制 → 二进制)

    • 十进制 → 八进制

      方法1:除8取余法,即每次将整数部分除以8,余数为该位权上的数,而商继续除以8,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。

      例:将十进制的(796)D转换为八进制的步骤如下:

    1. 将商796除以8,商99余数为4;

    2. 将商99除以8,商12余数为3;

    3. 将商12除以8,商1余数为4;

    4. 将商1除以8,商0余数为1;

    5. 读数,因为最后一位是经过多次除以8才得到的,因此它是最高位,读数字从最后的余数向前读,1434,即(796)D=(1434)O。

    wpsC030.tmp

    (Figure5:图解十进制 → 八进制)

      方法2:使用间接法,先将十进制转换成二进制,然后将二进制又转换成八进制;

    wpsC031.tmp

    (Figure6:图解十进制 → 八进制)

    • 十进制 → 十六进制

      方法1:除16取余法,即每次将整数部分除以16,余数为该位权上的数,而商继续除以16,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。

      例:将十进制的(796)D转换为十六进制的步骤如下:

    1. 将商796除以16,商49余数为12,对应十六进制的C;

    2. 将商49除以16,商3余数为1;

    3. 将商3除以16,商0余数为3;

    4. 读数,因为最后一位是经过多次除以16才得到的,因此它是最高位,读数字从最后的余数向前读,31C,即(796)D=(31C)H。

    wpsC042.tmp

    (Figure7:图解十进制 → 十六进制)

      方法2:使用间接法,先将十进制转换成二进制,然后将二进制又转换成十六进制;

    wpsC043.tmp

    (Figure8:图解十进制 → 十六进制)

    (三) (二进制) ↔ (八、十六进制)

    wpsC044.tmp

    (Figure9:二进制转换为其它进制)

    • 二进制 → 八进制

      方法:取三合一法,即从二进制的小数点为分界点,向左(向右)每三位取成一位,接着将这三位二进制按权相加,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的八进制数。如果向左(向右)取三位后,取到最高(最低)位时候,如果无法凑足三位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足三位。

      例:将二进制的(11010111.0100111)B转换为八进制的步骤如下:

    1. 小数点前111 = 7;

    2. 010 = 2;

    3. 11补全为011,011 = 3;

    4. 小数点后010 = 2;

    5. 011 = 3;

    6. 1补全为100,100 = 4;

    7. 读数,读数从高位到低位,即(11010111.0100111)B=(327.234)O。

    wpsC054.tmp

    (Figure10:图解二进制 → 八进制)

    二进制与八进制编码对应表:

    二进制

    八进制

    000

    0

    001

    1

    010

    2

    011

    3

    100

    4

    101

    5

    110

    6

    111

    7

     

    • 八进制 → 二进制

      方法:取一分三法,即将一位八进制数分解成三位二进制数,用三位二进制按权相加去凑这位八进制数,小数点位置照旧。

      例:将八进制的(327)O转换为二进制的步骤如下:

    1. 3 = 011;

    2. 2 = 010;

    3. 7 = 111;

    4. 读数,读数从高位到低位,011010111,即(327)O=(11010111)B。

    wpsC055.tmp

    (Figure11:图解八进制 → 二进制)

    • 二进制 → 十六进制

      方法:取四合一法,即从二进制的小数点为分界点,向左(向右)每四位取成一位,接着将这四位二进制按权相加,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的十六进制数。如果向左(向右)取四位后,取到最高(最低)位时候,如果无法凑足四位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足四位。

      例:将二进制的(11010111)B转换为十六进制的步骤如下:

    1. 0111 = 7;

    2. 1101 = D;

    3. 读数,读数从高位到低位,即(11010111)B=(D7)H。

    wpsC056.tmp

    (Figure12:图解二进制 → 十六进制)

    • 十六进制 → 二进制

      方法:取一分四法,即将一位十六进制数分解成四位二进制数,用四位二进制按权相加去凑这位十六进制数,小数点位置照旧。

      例:将十六进制的(D7)H转换为二进制的步骤如下:

    1. D = 1101;

    2. 7 = 0111;

    3. 读数,读数从高位到低位,即(D7)H=(11010111)B。

    wpsC057.tmp

    (Figure13:图解十六进制 → 二进制)

    (四) (八进制) ↔ (十六进制)

    wpsC058.tmp

    (Figure14:八进制与十六进制之间的转换)

    • 八进制 → 十六进制

      方法:将八进制转换为二进制,然后再将二进制转换为十六进制,小数点位置不变。

      例:将八进制的(327)O转换为十六进制的步骤如下:

    1. 3 = 011;

    2. 2 = 010;

    3. 7 = 111;

    4. 0111 = 7;

    5. 1101 = D;

    6. 读数,读数从高位到低位,D7,即(327)O=(D7)H。

    wpsC069.tmp

    (Figure15:图解八进制 → 十六进制)

    • 十六进制 → 八进制

      方法:将十六进制转换为二进制,然后再将二进制转换为八进制,小数点位置不变。

      例:将十六进制的(D7)H转换为八进制的步骤如下:

    1. 7 = 0111;

    2. D = 1101;

    3. 0111 = 7;

    4. 010 = 2;

    5. 011 = 3;

    6. 读数,读数从高位到低位,327,即(D7)H=(327)O。

    wpsC06A.tmp

    (Figure16:图解十六进制 → 八进制)

    四.扩展阅读

      1. 包含小数的进制换算:

    (ABC.8C)H=10x16^2+11x16^1+12x16^0+8x16^-1+12x16^-2

    =2560+176+12+0.5+0.046875

    =(2748.546875)D

      2. 负次幂的计算:

    2^-5=2^(0-5)=2^0/2^5=1/2^5

    同底数幂相除,底数不变,指数相减,反过来

    3. 我们需要了解一个数学关系,即23=8,24=16,而八进制和十六进制是用这关系衍生而来的,即用三位二进制表示一位八进制,用四位二进制表示一位十六进制数。接着,记住4个数字8、4、2、1(23=8、22=4、21=2、20=1)。



    展开全文
  • 进制整数转换成二进制采用“除2倒取余”,十进制小数转换成二进制小数采用“乘2取整”。 例题: 135D = __ B 解析:如下图所示,将135除以2,得余数,直到不能整除,然后再将余数从下至上倒取。得到结果:1000 ...

    作者:戴翔
    电子邮箱:daixiangcn@outlook.com
    简介:中华人民共和国公民,中国共青团员,CSDN博客专家,秦淮区疾控中心托管社会公益组织指南针工作室志愿者,创业公司研发中心负责人,在校大学生。


    1.十进制转R进制

    1.1 十进制转二进制

    十进制整数转二进制

    十进制整数转换成二进制采用“除2倒取余”,十进制小数转换成二进制小数采用“乘2取整”。

    例题: 135D = ______ B

    **解析:**如下图所示,将135除以2,得余数,直到不能整除,然后再将余数从下至上倒取。得到结果:1000 0111B.
    这里写图片描述

    图1.十进制整数转二进制

    十进制小数转二进制

    十进制小数转换成二进制小数采用 “乘2取整,顺序排列” 法。

    具体做法是:

    用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。

    然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。

    例题: 0.68D = ______ B(精确到小数点后5位)

    **解析:**如下图所示,0.68乘以2,取整,然后再将小数乘以2,取整,直到达到题目要求精度。得到结果:0.10101B.

    在这里插入图片描述

    图2.十进制小数转二进制

    1.2 十进制转八进制

    思路和十进制转二进制一样,参考如下例题:

    例题: 10.68D = ______ Q(精确到小数点后3位)

    **解析:**如下图所示,整数部分除以8取余数,直到无法整除。小数部分0.68乘以8,取整,然后再将小数乘以8,取整,直到达到题目要求精度。得到结果:12.534Q.

    这里写图片描述

    图3.十进制转八进制

    1.3 十进制转十六进制

    思路和十进制转二进制一样,参考如下例题:

    例题: 25.68D = ______ H(精确到小数点后3位)

    **解析:**如下图所示,整数部分除以16取余数,直到无法整除。小数部分0.68乘以16,取整,然后再将小数乘以16,取整,直到达到题目要求精度。得到结果:19.ae1H.

    这里写图片描述

    图4.十进制转十六进制
    # 2.R进制转十进制 ## 2.1 二进制转十进制 **方法为:**把二进制数按权展开、相加即得十进制数。(具体用法如下图)

    例题: 1001 0110B = ______ D

    **解析:**如下图所示。得到结果:150D.

    这里写图片描述

    图5.二进制转十进制

    2.2 八进制转十进制

    八进制转十进制的方法和二进制转十进制一样。

    例题: 26Q = ______ D

    **解析:**如下图所示。得到结果:22D.

    这里写图片描述

    图6.八进制转十进制

    2.3 十六进制转十进制

    例题: 23daH = ______ D

    **解析:**如下图所示。得到结果:9178D.

    这里写图片描述

    图7.十六进制转十进制

    3.二进制转八进制

    二进制转换成八进制的方法是,取三合一法,即从二进制的小数点为分界点,向左(或向右)每三位取成一位。

    例题: 1010 0100B = ____Q

    **解析:**计算过程如下图所示。得到结果:244Q.

    这里写图片描述

    图8.二进制转八进制

    4.二进制转十六进制

    二进制转换成八进制的方法是,取四合一法,即从二进制的小数点为分界点,向左(或向右)每四位取成一位。

    例题: 1010 0100B = ____H

    **解析:**计算过程如下图所示。得到结果:a4H.

    这里写图片描述

    图9.二进制转十六进制

    5.工欲善其事,必先利其器

    下面的表格是8位二进制所对应的十进制数值,对进制转换以及类似题目的理解非常有用:

    1 1 1 1 1 1 1 1 B
    128 64 32 16 8 4 2 1 D

    注:B:二进制
           D:十进制


    例题: 135D = ______ B

    **解析:**有了上面二进制对应十进制数值的表格,我们就可以将题目给的十进制135拆分为:128+7,再从表格中找到对应的数值,拼凑即可得到答案。
    135D = 128D + 7D = 1000 0111B


    作者:戴翔
    电子邮箱:daixiangcn@outlook.com
    简介:中华人民共和国公民,中国共青团员,CSDN博客专家,秦淮区疾控中心托管社会公益组织指南针工作室志愿者,创业公司研发中心负责人,在校大学生。


    展开全文
  • 为什么要使用进制数 数据在计算机中的表示,最终以二进制的形式存在 , 就是各种 &lt;黑客帝国&gt;电影中那些 0101010… 的数字 ; 我们操作计算机 , 实际 就是 使用 程序 和 软件 在 计算机上 各种读写...
  • 二进制 二进制就是计算机常用的进制,即逢二进一。例如:1010 八进制 ...上面就是对进制的简单介绍,下面就是对进制转换而进行介绍。 1.二进制转八进制 拿二进制数10010110举例 首先需要3个二进...
  • 进制之间的相互转换

    2019-03-13 20:45:59
    一、(二、八、十六)转换为十进制 ...二进制转换为十进制 其他进制同理,将2换成进制数(八进制转换,将2变为8) 余数倒着写 100101 二进制转换为八进制 八进制转换为二进制 二进制转换为十六...
  • 首先应该记住基本的进制对应关系:二进制00000001001000110100010101100111十进制01234567十六进制01234567二进制10001001101010111100110111101111十进制89101112131415十六进制89ABCDEF十六进制使用0~9和A~F来表示...
  • 今天朋友去面试,面试官问他八进制转换二进制方式原理,他突然间蒙逼了,在常见的计算机知识当中,这种最基础的知识,常常会被人给忘记,所以今天我来写一篇进制转换的总结,来复习巩固一下。 本文参考百度经验...
  • 计算机进制转换

    2019-01-28 22:20:17
    1.什么叫进制 进制就是逢几进一 我们说的n进制其实就是指逢n进一,人类最习惯使用十进制。...计算机只识别二进制的数,如果有别的进制的数自动转换进制运算! 2.二进制 2.1概念引入 20世纪30年代中期,...
  • 进制转换:二进制、八进制、十六进制、十进制之间的转换 不同进制之间的转换在编程中经常会用到,尤其是C语言。 将二进制、八进制、十六进制转换为十进制 二进制、八进制和十六进制向十进制转换都非常容易,就是...
  • 进制转换 在生活和实际开发中,进制转换是一个常考的知识点。 虽然Java开发者已经对其进行了封装,但还是要学会自己编写相应的进制转换器的。 常用的进制有二进制,八进制,十进制,十六进制。 二.将整数转换成十六...
  • python进制转换函数

    2019-07-25 21:10:45
    文章目录bin()oct()hex()其他进制转换成十进制 bin() #十进制转换二进制 i = 16 j = bin(i) print(j) 0b10000 0b:表示它是一个二进制数字,10000:十进制数16转换成二进制的值 oct() #十进制转换八进制 i = 16 j =...
  • Python进制转换10进制转换为16进制,不使用hex函数 给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字母(a-f)都必须是小写。 十六进制字符串...
  • Java实现进制转换

    2018-07-16 18:20:35
    什么是进制转换? 比如说,从10进制转换成2进制,这样就是进制转换 我们该怎么去实现m进制转换成n进制 思想: 其实进制转换没有想得那么难,在java中我们可以借助字符串来帮助我们  首先我们可以将m进制表示的...
  • Java的进制转换  进制转换原理  十进制 转 二进制:  原理: 对十进制数进行除 2 运算取余。  6 --> 110  二进制 转 十进制  原理: 二进制 乘以 2 的n次幂 的过程  110 ->0*20 + 1*21 + 1 * 22 ...
  • 可以实现常见的进制转换,例如将十进制转换成八进制等形式。 下面是实现代码 #include &quot;stdafx.h&quot; #include&quot;math.h&quot; #include&quot;stdlib.h&quot; int _tmain...
  • 方法1:使用进制转换转载:https://zhidao.baidu.com/question/51006929.html#include #include /* 十六进制数转换为十进制数 */ long hexToDec(char *source); /* 返回ch字符在sign数组中的序号 */ int ...
  • 进制转换成T进制 给定一个整数Q(2<=Q<=10),一个非空字符串,以及另一个整数T(2<=T<=10), 编程要求过滤掉字符串中所有非Q进制数对应的字符组成一个新的字符串,该字符串无正负号,将该字符串表示的Q...
1 2 3 4 5 ... 20
收藏数 664,679
精华内容 265,871
关键字:

进制转换