Conversiones de bases comunes en lenguaje C

Directorio de artículos

  • 1. Convierte números decimales a números binarios y octales
  • 2. Convierte números decimales a números hexadecimales
  • 3. Convierte números binarios y números octales a números decimales
  • 4. Convertir números hexadecimales a números decimales

prefacio

La base más común en la vida es decimal, y hay un tipo de problema de programación que requiere convertir decimal a otras bases.Este blog hablará principalmente sobre varios problemas comunes de conversión de base en lenguaje C.


1. Convierte números decimales a números binarios y octales

      Método: Por ejemplo, para convertir el número decimal 100 en un número binario es dividir 100 entre 2 para obtener el cociente y el resto, y luego dividir el cociente entre 2 continuamente hasta que el cociente sea 0. Registre el resto en orden y luego envíe el resto en orden inverso, que es el resultado binario. El sistema octal es el mismo, el cociente se divide continuamente por 8 y, finalmente, el cociente es 0, el resto se registra en orden y luego el resto se emite en orden inverso, que es el resultado del sistema octal. Este método también se puede extender a cualquier base para convertirla en dos a nueve.

Los gráficos son los siguientes:

 el código se muestra a continuación:

#include <stdio.h>
int main()
{
    int x, n;
    scanf("%d %d", &x, &n);//x是要转换的十进制数,n为要转换成的进制
    int arr[100] = { 0 };//创建一个足够大的数组来存放余数
    int i = 0,j = 0;
    while (x)
    {
        arr[i++] = x % n;//存放余数,i最后的值正好是余数的个数
        x /= n;
    }
    for (j = i - 1; j >= 0; j--)
    {
        printf("%d", arr[j]);//余数倒序输出
    }
    printf("\n");
    return 0;
}

2. Convertir decimal a hexadecimal

       La conversión de decimal a hexadecimal también requiere métodos como la división continua del cociente entre 16 y la salida en orden inverso, pero dado que los caracteres como A\B\C\D\E\F aparecerán en hexadecimal, también es necesario sumar los valores obtenidos. el resto se convierte aún más. el código se muestra a continuación:

#include <stdio.h>
int main()
{
    int x;
    scanf("%d", &x);
    char arr[100] = { 0 };//因为十六进制中会出现A\B\C\D\E\F等字符,所以保存余数的数组类型应定义为char
    int i = 0, j = 0;
    while (x)
    {
        arr[i++] = x % 16;
        x /= 16;
    }
    for (j = 0; j < i; j++)
    {
        //将取出的余数转换为对应的字符
        switch (arr[j])
        {
        case 10:arr[j] = 'A'; break;
        case 11:arr[j] = 'B'; break;
        case 12:arr[j] = 'C'; break;
        case 13:arr[j] = 'D'; break;
        case 14:arr[j] = 'E'; break;
        case 15:arr[j] = 'F'; break;
        default:arr[j] += 48;
        }
    }
    for (j = i - 1; j >= 0; j--)
    {
        printf("%c", arr[j]);//逆序打印
    }
    printf("\n");
    return 0;
}

3. Convierte números binarios y números octales a números decimales

Método: Es necesario sacar cada bit del número de entrada, multiplicarlo por el peso de este bit y finalmente sumar el resultado.

el código se muestra a continuación:

#include <stdio.h>
#include <math.h>
int main()
{
	int n = 0, sum = 0, i = 0, x = 0;
	scanf("%d %d", &x, &n);//x为输入的二进制或八进制的数,n为进制。
	while (x)
	{
		sum += (x%10)*pow(n, i++);//x%10将x的每一位取出,再与这个位上的权重相乘。
		x /= 10;
	}
	printf("%d\n", sum);
	return 0;
}

4. Convertir números hexadecimales a números decimales

       El hexadecimal contiene caracteres como A\B\C\D\E\F, por lo que se puede considerar como una cadena al ingresar, y es necesario convertir cada carácter en el número correspondiente y el estándar primero. Los pesos en se multiplican y se suman para obtener el valor final.

el código se muestra a continuación:

#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
    char arr1[100] = { 0 };
    scanf("%s", arr1);
    int len = strlen(arr1);
    int i = 0,  sum = 0;
    for (i = 0; i<len; i++)
    {
        int temp = 0;
        switch (arr1[i])
        {
        case 'A':temp = 10; break;
        case 'B':temp = 11; break;
        case 'C':temp = 12; break;
        case 'D':temp = 13; break;
        case 'E':temp = 14; break;
        case 'F':temp = 15; break;
        default:temp = arr1[i] - '0'; break;
        //将各个位上的字符转换为对应的数字
        }
        sum += temp * pow(16, len-i-1);//各个位上的权重相乘再相加
    }
    printf("%d\n", sum);
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/m0_74265792/article/details/129961737
Recomendado
Clasificación