Введение
Системы счисления - это способы представления чисел с использованием различных символов и математических операций. Перевод между различными системами счисления - это распространенная задача в программировании. В этом лабораторном задании мы покажем программы, которые могут переводить числа из одной системы в другую. Мы рассмотрим:
- Перевод из двоичной системы в десятичную
- Перевод из восьмеричной системы в десятичную
- Перевод из десятичной системы в двоичную (без рекурсии)
- Перевод из десятичной системы в двоичную (с рекурсией)
Примечание: вам нужно самостоятельно создать файл
~/project/main.c, чтобы практиковаться в написании кода и научиться компилировать и запускать его с использованием gcc.
cd ~/project
## создать main.c
touch main.c
## скомпилировать main.c
gcc main.c -o main
## запустить main
./main
Преобразование из двоичной в десятичную систему
Двоичная система счисления - это система, которая использует всего два цифры: 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.



