不同进制之间相互转换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ftx456789/article/details/85932571

不同进制的转换都可以通过转换为10进制再由10进制转为其他进制的方法来实现,首先我们先看看不同的进制转为10进制如何操作
举一个16进制转为10进制的例子,首先有数 1 F 3 E 1F3E ,将他转为10进制我们可以先把 1 F 3 E 1F3E 分解来看 1 F 3 E = 1 1 6 3 + F 1 6 2 + 3 16 + E 1F3E=1\cdot 16^{3}+F\cdot 16^{2}+3\cdot 16+E
也就是说 1 1 乘以 16 16 3 3 次, F F 乘以 16 16 2 2 次, 3 3 乘以 16 16 1 1 次, E E 乘以 16 16 0 0 次。
根据乘法的分配律,上述式子我们可以化为 ( ( ( 1 16 + F ) 16 + 3 ) 16 + E ) (((1\cdot16+F)\cdot16+3)\cdot16+E)
所以可以在该数的长度的复杂下完成进制转换

    char a[]="1F3E";
    int len=strlen(a);
    int sum=0;
    for(int i=0;i<len;i++)
    {
        sum=sum*16;
        if(a[i]<='9'&&a[i]>='0')
        sum+=a[i]-'0';
        else
        sum+=a[i]-'A'+10;
    }

那么10进制如何转化为其他进制下的数呢
同样的我们拿一个数举例子如: 7998 7998
我们用的是余数法,对于一个10进制数我们对其不断的做除法,每次所留下的余数就是就是要转化的数的低位
7998 / 16 = 499.......14 E 7998/16=499.......14\rightarrow E
499 / 16 = 31.......3 499/16=31.......3
31 / 16 = 1.......15 F 31/16=1.......15\rightarrow F
1 / 16 = 0.......1 1/16=0.......1
所以从下往上看我们就可以得到我们要的16进制数 1 F 3 F 1F3F
已知一个10进制数我们可以用栈来存我们每次的到的余数,最后再一次弹栈就是10进制要转化为其他的进制数了

    stack<int> s;
    int num=7998;
    while(num)
    {
        s.push(num%16);
        num/=16;
    }
    while(!s.empty())
    {
        if(s.top()<10)
            printf("%d",s.top());
        else
            printf("%c",s.top()-10+'A');
        s.pop();
    }

不同进制的转换都可以用10进制为媒介然后先转换为10进制再从10进制转为其他进制

猜你喜欢

转载自blog.csdn.net/ftx456789/article/details/85932571