二进制转十进制,八进制转十进制,十六进制转十进制,十进制转二进制,十进制转八进制,十进制转十六进制。

此篇博客是摘抄总结的,巩固基础。
上代码:

- 二进制转十进制:

int BinarytoDecimal(long long n)
{
    int decimalnumber = 0, i = 0, remainder;
    while(n!=0)
    {
        remainder = n%10;
        n/=10;
        decimalnumber += remainder*pow(2,i);
        i++;
    }
    return decimalnumber;
}

由于二进制的长度较长,所以定义的是longlong类型。且编写的函数中用到了pow()函数,所以在使用之前需要调用<math.h>头文件。每一步的代码的具体含义可以自行揣度,并不难。

同理,八进制转十进制也可以根据上述代码加以修改便能使用,原理相同。

- 八进制转十进制:

上代码:

int OctaltoDecimal(long long n)
{
    int decimalnumber = 0, i = 0, remainder;
    while(n!=0)
    {
        remainder = n%10;
        n/=10;
        decimalnumber += remainder*pow(8,i);
        i++;
    }
    return decimalnumber;
}

- 十六进制转十进制:

当然十六进制转十进制稍微有点难度,其难点在于输入十六进制时输入的是字符串而不是整数,所以我们必须从字符串着手。
上代码:

int HexadecimaltoDecimal(char a[], int length)
{
    int i, j;
    int decimalnumber = 0;
    for(i=length-1,j=0;i>=0;i--,j++)
    {
        if(isalpha(a[i]))
            decimalnumber += (a[i]-'A'+10)*pow(16,j);
        else
            decimalnumber += (a[i]-'0')*pow(16,j);
    }
    return decimalnumber;
}

机制与二进制转十进制的进制类似,但是需要对每个字符进行处理,使每一位都变成意义想通的整数。需要用到<math.h>,<string.h>两个头文件。

- 十进制转二进制

上代码:

int DecimaltoBinary(int n)
{
    long binarynumber = 0;int i = 1, remainder;
    while(n!=0)
    {
        remainder = n%2;
        n /= 2;
        binarynumber += remainder*i;
        i *= 10;
    }
    return binarynumber;
}

其实十进制转二进制还有一种思路,那就是通过定义一个整数数组,把十进制数模2的余数存进去,最后倒叙输出即可。
上代码:

int a[100];
int DecimaltoBinary(int n)
{

    int i = 0, remainder;
    while(n!=0)
    {
        remainder = n%2;
        n /= 2;
        a[i++] = remainder;
    }
    for(i=i-1;i>=0;i--)
        printf("%d", a[i]);
}

此处需要定义一个全局数组。

- 十进制转八进制

上代码:

int DecimaltoOctal(int n)
{
    int octalnumber = 0, i = 1;
    while (n != 0)
    {
        octalnumber += (n % 8) * i;
        n /= 8;
        i *= 10;
    }
    return octalnumber;
}

- 十进制转十六进制

这个就稍显麻烦了,网上看到过一种思路,就是将十进制数对16取模,然后用一个数组将每个余数存起来,定义一个函数将数组的每个数转换成十六进制的数码即可
上代码:

#include <stdio.h>

char getnum(int a)
{
    switch(a) //进制转换
    {
    case 0:
        return '0';
        break;
    case 1:
        return '1';
        break;
    case 2:
        return '2';
        break;
    case 3:
        return '3';
        break;
    case 4:
        return '4';
        break;
    case 5:
        return '5';
        break;
    case 6:
        return '6';
        break;
    case 7:
        return '7';
        break;
    case 8:
        return '8';
        break;
    case 9:
        return '9';
        break;
    case 10:
        return 'A';
        break;
    case 11:
        return 'B';
        break;
    case 12:
        return 'C';
        break;
    case 13:
        return 'D';
        break;
    case 14:
        return 'E';
        break;
    case 15:
        return 'F';
        break;

    }
}

int main()
{
    int a[128];
    int n,i=0;
    scanf("%d",&n);

    if(n==0)
    {
        printf("0");
    }

    else
    {
        while(n)
        {
            a[i++]=n%16;
            n/=16;
        }

        for(i=i-1; i>=0; i--)
        {
            putchar(getnum(a[i]));
        }
    }
    return 0;
}

至于还有其他的转换,就可以通过上述转换为中间媒介进行转换。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值