首页 > 其他 > 详细

进制准换

时间:2014-04-04 15:59:31      阅读:480      评论:0      收藏:0      [点我收藏+]



2 to 8:以10010为例,要转成8进制,则从右向左看,每3个为一组,不足的补零,变成010 010,加上权值后为22,即为8进制数!

2 to 16: 以101110为例,要转成16进制,类似,从右向左看,每4个为一组,不足的补零,变成0010 1110,加上权值后为2E,有个规律,8进制的各个位<=7,16进制的各个位<=15,也就是说16进制中的数可以是1、2、3、4……9、A、B、C、D、E、F。

8 to 16:以27为例,8进制和16进制之间的转换需要用2进制来作为过渡,先转成2进制为010 111,然后从右向左数,将现在的3个一组变为4个一组,不足的补零,变为0001 0111,然后权值变换后为1 7,也就是16进制数 17

其实8,16,2,进制之间的转换很好算。下面介绍10到2,8,16进制之间的转换。

同上面那样,为了快速计算,我们需要了解一些比较常用的式子。如下所示:

      21=2 ; 22=4 ; 23=8 ; 24=16 ; 25=32 ; 26=64 ; 27=128 ; 28=256

      10 to 2:以52为例,52-32-16-4 = 0,也就是说52可以分解为4+16+32,而32对应的是25,因而最高位是第6位为1,即32是100000(或者说后面跟5个0)。这样52可以分解为100000+10000+100=110100(2)

      通过这种方式转为2进制之后就很容易再转为8、16进制。

原来的方法:

用2辗转相除至结果为1

将余数和最后的1从下向上倒序写 就是结果

例如302

302/2 = 151 余0

151/2 = 75 余1

75/2 = 37 余1

37/2 = 18 余1

18/2 = 9 余0

9/2 = 4 余1

4/2 = 2 余0

2/2 = 1 余0

故二进制为100101110

//ACMer LittleFool
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
using namespace std;
/*此方法与原来方法计较:用位运算进行代替除法运算,并减少除法进的多余的次数*/
int zhuanhuan(int a) //十进制转二进制 快速转换
{
    int n,i,len,pow2;
    char tag[1000];
    memset(tag,‘0‘,sizeof(tag));
    pow2=1;
    for(i=0;pow2<=a;i++)
    pow2<<=1;
    tag[i]=‘\0‘;
    len=i-1;
    while(a>0)
    {
        if(a>=pow2)
        {
            tag[len-i]=‘1‘;
            a-=pow2;
        }
        i--;
        pow2>>=1;
    }
    a=atoi(tag);
   // printf("%d\n",a);
    return a;
}
int main()
{
    int a=2,i;
    for(i=0;i<29;i++)
    zhuanhuan(i);
    return 0;
}





进制准换,布布扣,bubuko.com

进制准换

原文:http://blog.csdn.net/littlefool5201314/article/details/22927311

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!