Приветствуем вас на нашем очередном уроке по программированию на языке C++. Сегодня мы рассмотрим важную тему — конвертация чисел из двоичной системы счисления в десятичную и наоборот. Эта тема особенно актуальна для тех, кто хочет глубже понять внутреннее устройство компьютера и работу с данными на низком уровне.
Внимание! Это урок для более продвинутых треубщий знаний функций, циклов и условий, которые мы рассмотрим в следующих уроках.
Что такое двоичная система счисления?
Двоичная система счисления — это система, основанная на двух цифрах: 0 и 1. Каждая позиция в числе представляет собой степень двойки, начиная с 2^0 справа налево. Например, число 1010 в двоичной системе эквивалентно 10 в десятичной системе:
- 1 * 2^3 = 8
- 0 * 2^2 = 0
- 1 * 2^1 = 2
- 0 * 2^0 = 0
Итак, 8 + 0 + 2 + 0 = 10.
Конвертация из двоичной системы в десятичную
Чтобы конвертировать число из двоичной системы в десятичную, необходимо умножить каждую цифру двоичного числа на соответствующую степень двойки и затем сложить все результаты. Рассмотрим пример:
int binaryToDecimal(string binary) {
int decimal = 0;
int base = 1; // 2^0
int length = binary.length();
for (int i = length - 1; i >= 0; i--) {
if (binary[i] == '1') {
decimal += base;
}
base = base * 2;
}
return decimal;
}
В этом коде строка binary
анализируется с конца, и для каждой ‘1’ добавляется соответствующая степень двойки к итоговому значению decimal
.
Конвертация из десятичной системы в двоичную
Чтобы конвертировать число из десятичной системы в двоичную, необходимо делить число на 2 и записывать остатки до тех пор, пока число не станет равно нулю. Остатки, записанные в обратном порядке, дадут двоичное представление числа. Рассмотрим пример:
string decimalToBinary(int decimal) {
string binary = "";
while (decimal > 0) {
binary = (decimal % 2 == 0 ? "0" : "1") + binary;
decimal = decimal / 2;
}
return binary;
}
В этом коде остаток от деления на 2 добавляется в начало строки binary
, что и формирует двоичное представление числа.
Примеры использования
Теперь давайте рассмотрим несколько примеров использования наших функций:
int main() {
string binaryNumber = "1010";
int decimalNumber = 10;
cout << "Binary to Decimal:" << endl;
cout << "Binary: " << binaryNumber << " = Decimal: " << binaryToDecimal(binaryNumber) << endl;
cout << "Decimal to Binary:" << endl;
cout << "Decimal: " << decimalNumber << " = Binary: " << decimalToBinary(decimalNumber) << endl;
return 0;
}
Эти примеры покажут, как происходит конвертация и помогут закрепить материал.
Задание для самостоятельной работы
Для закрепления материала, предлагаем вам выполнить следующие задания:
Задание 1: Конвертация из двоичной системы в десятичную
Напишите функцию, которая принимает строку, представляющую двоичное число, и возвращает его десятичное значение. Протестируйте вашу функцию на следующих примерах:
- Входное значение:
"1101"
, Ожидаемый результат:13
- Входное значение:
"101010"
, Ожидаемый результат:42
- Входное значение:
"11111111"
, Ожидаемый результат:255
Задание 2: Конвертация из десятичной системы в двоичную
Напишите функцию, которая принимает десятичное число и возвращает строку, представляющую его двоичное значение. Протестируйте вашу функцию на следующих примерах:
- Входное значение:
13
, Ожидаемый результат:"1101"
- Входное значение:
42
, Ожидаемый результат:"101010"
- Входное значение:
255
, Ожидаемый результат:"11111111"
Задание 3: Интеграция функций
Напишите программу, которая использует обе функции из заданий 1 и 2 для конвертации числа из двоичной системы в десятичную и обратно. Протестируйте программу на следующих примерах:
- Входное значение:
"1101"
(двоичное), Ожидаемый результат:"1101"
(после конвертации туда и обратно) - Входное значение:
42
(десятичное), Ожидаемый результат:42
(после конвертации туда и обратно)
Удачи в выполнении заданий! Ждем ваши решения на следующем уроке.
Заключение
В этом уроке мы узнали, как конвертировать числа из двоичной системы в десятичную и наоборот. Это базовые навыки, которые пригодятся в работе с низкоуровневыми данными и понимании внутренней структуры компьютера. Надеемся, что этот урок был полезен и поможет вам в дальнейшем изучении C++.