Преобразование между системами счисления

CCBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Системы счисления - это способы представления чисел с использованием различных символов и математических операций. Перевод между различными системами счисления - это распространенная задача в программировании. В этом лабораторном задании мы покажем программы, которые могут переводить числа из одной системы в другую. Мы рассмотрим:

  • Перевод из двоичной системы в десятичную
  • Перевод из восьмеричной системы в десятичную
  • Перевод из десятичной системы в двоичную (без рекурсии)
  • Перевод из десятичной системы в двоичную (с рекурсией)

Примечание: вам нужно самостоятельно создать файл ~/project/main.c, чтобы практиковаться в написании кода и научиться компилировать и запускать его с использованием gcc.

cd ~/project
## создать main.c
touch main.c
## скомпилировать main.c
gcc main.c -o main
## запустить main
./main

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/ControlFlowGroup -.-> c/if_else("If...Else") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/ControlFlowGroup -.-> c/while_loop("While Loop") c/FunctionsGroup -.-> c/function_declaration("Function Declaration") c/FunctionsGroup -.-> c/function_parameters("Function Parameters") c/FunctionsGroup -.-> c/math_functions("Math Functions") c/FunctionsGroup -.-> c/recursion("Recursion") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/if_else -.-> lab-123228{{"Преобразование между системами счисления"}} c/for_loop -.-> lab-123228{{"Преобразование между системами счисления"}} c/while_loop -.-> lab-123228{{"Преобразование между системами счисления"}} c/function_declaration -.-> lab-123228{{"Преобразование между системами счисления"}} c/function_parameters -.-> lab-123228{{"Преобразование между системами счисления"}} c/math_functions -.-> lab-123228{{"Преобразование между системами счисления"}} c/recursion -.-> lab-123228{{"Преобразование между системами счисления"}} c/user_input -.-> lab-123228{{"Преобразование между системами счисления"}} c/output -.-> lab-123228{{"Преобразование между системами счисления"}} end

Перевод из двоичной системы в десятичную

Двоичная система счисления - это система, которая использует всего два цифры: 0 и 1. Десятичная система счисления - это система, которая использует десять цифр от 0 до 9. Вот программа на C, которая переводит двоичное число в его десятичное эквивалент:

#include<stdio.h>
#include<math.h>

// Прототип объявления функции
int binary_decimal(int n);

int main()
{
    printf("\n\n\t\tLabEx - Лучшее место для обучения\n\n\n");
    int n;
    char c;
    printf("Введите двоичное число: ");
    scanf("%d", &n);
    printf("\n\n\nДесятичное эквивалент %d равно  %d\n\n", n, binary_decimal(n)); // вызов функции
    printf("\n\n\t\t\tПрограммирование - это весело!\n\n\n");
    return 0;
}

// Определение функции для перевода двоичного числа в десятичное.
int binary_decimal(int n)
{
    int decimal = 0, i = 0, rem;
    while(n!= 0)
    {
        rem = n%10;   // возвращает цифру в единицах
        n = n/10; // возвращает число без его цифры в единицах
        /*
            pow - это системная функция, которая принимает
            два целых числа в качестве параметров входных данных
        */
        decimal += rem*pow(2, i++);
    }
    /*
        возвращает десятичное эквивалент входного
        двоичного числа в вызов функции
    */
    return decimal;
}

Перевод из восьмеричной системы в десятичную

Восьмеричная система счисления - это система, которая использует восемь цифр от 0 до 7. Вот программа на C, которая переводит восьмеричное число в его десятичное эквивалент:

#include<stdio.h>
#include<math.h>

int main()
{
    printf("\n\n\t\tLabEx - Лучшее место для обучения\n\n\n");
    long int octal, val, decimal = 0;
    int i = 0;
    printf("Введите любое восьмеричное число: ");
    scanf("%ld", &val);
    octal = val;
    while(octal!= 0)
    {
        /*
            i++ - это постфиксный инкремент, где значение
            сначала присваивается, а затем увеличивается
        */
      decimal += (octal % 10)*pow(8, i++);
      octal/=10;    // то же, что и octal=octal/10
    }
    printf("\n\n\nДесятичное значение эквивалентное %ld равно %ld\n\n\n", val, decimal);
    printf("\n\n\t\t\tПрограммирование - это весело!\n\n\n");
    return 0;
}

Перевод из десятичной системы в двоичную (без рекурсии)

Вот программа на C, которая переводит десятичное число в его двоичное эквивалент без рекурсии:

#include<stdio.h>

int main()
{
    printf("\n\n\t\tLabEx - Лучшее место для обучения\n\n\n");
    int n,c,k;
    printf("Введите целое число в десятичной системе счисления: ");
    scanf("%d", &n);

    // В 31-разрядном формате
    printf("\n\n\nДвоичное эквивалент десятичного значения %d равно:", n);

    for(c = 31; c >= 0; c--)
    {
        k = n>>c;
        /*
            num&1 = возвращает true, если последняя цифра num равна 1
            в противном случае false
        */
        if(k&1)
            printf("1");
        else
            printf("0");
    }
    printf("\n");
    printf("\n\n\t\t\tПрограммирование - это весело!\n\n\n");
    return 0;
}

Перевод из десятичной системы в двоичную (с рекурсией)

Вот программа на C, которая переводит десятичное число в его двоичное эквивалент с использованием рекурсии:

#include<stdio.h>

// Прототипы объявления функций
void decimal_binary(int );
void F(int );
void reverse(int );

int main()
{
    printf("\n\n\t\tLabEx - Лучшее место для обучения\n\n\n");
    int n;
    printf("\n\nВведите целое число в десятичной системе счисления: ");
    scanf("%d", &n);

    // В 31-разрядном формате
    printf("\n\nДвоичное эквивалент десятичного значения %d с использованием метода decimal_binary: ", n);

    decimal_binary(n);  // вызов функции

    printf("\n\nДвоичное эквивалент десятичного значения %d с использованием метода F(): ", n);
    F(n);   // вызов функции
    printf("\n\nОбратная запись двоичного представления значения %d: ", n);
    reverse(n); // вызов функции
    printf("\n\n\t\t\tПрограммирование - это весело!\n\n\n");
    return 0;
}

// определение функции
void decimal_binary(int i)
{
    if(i <= 1)
    printf("%d", i);   // для печати в порядке сверху вниз
    else
    {
        decimal_binary(i/2);
        printf("%d", i%2);
    }
}

void F(int j)
{
    if(j/2)
    {
        F(j/2);
    }
    printf("%d", j%2);
}

void reverse(int k)
{
    if(k <= 1)
        printf("%d", k);
    else
    {
        printf("%d", k%2);
        F(k/2);
    }
    printf("\n\n");
}

Резюме

В этом практическом занятии мы продемонстрировали программы, которые могут преобразовывать числа между различными системами счисления. Мы рассмотрели перевод из двоичной в десятичную систему, из восьмеричной в десятичную систему и перевод из десятичной в двоичную систему (с использованием рекурсии и без нее). Надеемся, что это практическое занятие помогла вам понять, как преобразовывать числа между различными системами счисления в программировании на C.