不同进制之间相互转换

不同进制的转换都可以通过转换为10进制再由10进制转为其他进制的方法来实现,首先我们先看看不同的进制转为10进制如何操作
举一个16进制转为10进制的例子,首先有数 1 F 3 E 1F3E 1F3E,将他转为10进制我们可以先把 1 F 3 E 1F3E 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 1F3E=1163+F162+316+E
也就是说 1 1 1乘以 16 16 16 3 3 3次, F F F乘以 16 16 16 2 2 2次, 3 3 3乘以 16 16 16 1 1 1次, E E E乘以 16 16 16 0 0 0次。
根据乘法的分配律,上述式子我们可以化为 ( ( ( 1 ⋅ 16 + F ) ⋅ 16 + 3 ) ⋅ 16 + E ) (((1\cdot16+F)\cdot16+3)\cdot16+E) (((116+F)16+3)16+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 7998
我们用的是余数法,对于一个10进制数我们对其不断的做除法,每次所留下的余数就是就是要转化的数的低位
7998 / 16 = 499.......14 → E 7998/16=499.......14\rightarrow E 7998/16=499.......14E
499 / 16 = 31.......3 499/16=31.......3 499/16=31.......3
31 / 16 = 1.......15 → F 31/16=1.......15\rightarrow F 31/16=1.......15F
1 / 16 = 0.......1 1/16=0.......1 1/16=0.......1
所以从下往上看我们就可以得到我们要的16进制数 1 F 3 F 1F3F 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进制转为其他进制

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值