Почему числа нужно кодировать?
Компьютер работает с информацией, представленной в двоичном коде – последовательностях нулей и единиц. Человек же привык к записи чисел в десятичной системе. Следовательно, необходим перевод (кодирование) чисел из привычной для нас формы в понятную для компьютера.
Основная проблема: как представить не только сам числовой код (двоичный эквивалент), но и знак числа (плюс или минус), а также дробную часть.
2. Кодирование целых чисел
а) Прямой код
Это самый простой способ представления чисел.
Старший (самый левый) разряд отводится под знак числа: 0 – плюс, 1 – минус.
Остальные разряды содержат двоичный код самого числа (его модуля).
Пример для 8-битного представления:
+5 в двоичной системе это 101.
Прямой код: 0 (знак +) и 0000101 (7-разрядное представление числа 5). Итого: 00000101.
-5: 1 (знак -) и 0000101. Итого: 10000101.
Недостаток: Прямой код неудобен для выполнения арифметических операций (сложение чисел с разными знаками требует сложных алгоритмов). Для упрощения работы процессора используются обратный и дополнительный коды.
б) Обратный код
Используется как промежуточный этап для получения дополнительного кода.
Для положительных чисел обратный код совпадает с прямым.
Для отрицательных чисел обратный код получается инвертированием всех битов модуля числа (включая знаковый разряд, но трактуя его как часть числа).
Пример:
+5: прямой код = обратному коду = 00000101.
-5:
Модуль числа: 5 -> 00000101
Инвертируем все биты: 00000101 -> 11111010
Получили обратный код: 11111010
в) Дополнительный код
Это основной способ представления целых отрицательных чисел в памяти компьютера.
Для положительных чисел дополнительный код совпадает с прямым.
Для отрицательных чисел дополнительный код получается путем прибавления 1 к обратному коду.
Алгоритм для отрицательного числа:
Записать двоичный код модуля числа.
Записать обратный код этого числа (инвертировать все биты).
К полученному обратному коду прибавить 1.
Пример для числа -5 (8 бит):
Модуль числа: 5 -> 00000101
Обратный код: 11111010
Прибавляем 1: 11111010 + 1 = 11111011
Дополнительный код числа -5 равен 11111011.
Проверка: Сложим числа 5 и -5 в дополнительном коде. Должен получиться ноль.
text
00000101 (+5)
+ 11111011 (-5)
---------------
100000000 (Результат)
Самый старший (девятый) бит выходит за разрядную сетку (переполнение) и отбрасывается. Остается 00000000, то есть 0. Это доказывает корректность представления.
3. Кодирование вещественных чисел (чисел с плавающей запятой)
Для представления таких чисел используется форма с плавающей запятой (точкой). Этот формат аналогичен записи чисел в стандартном виде в математике (например, 123,45 = 1.2345 * 10^2).
Любое число N можно представить в виде:
N = m * q<sup>p</sup>
где:
m – мантисса числа (дробная часть, у которой первая значащая цифра после запятой не равна нулю, т.е. 1 ≤ |m| < q для q=2).
q – основание системы счисления (в компьютере q = 2).
p – порядок (целое число, показывает, на сколько разрядов нужно сдвинуть запятую).
В памяти компьютера число хранится в виде трех элементов:
Знак числа (1 бит).
Порядок (экспонента) – хранится в смещенной форме (смещение нужно, чтобы избежать отрицательного порядка).
Мантисса – хранится в нормализованном виде (целая часть равна 1). Так как она всегда равна 1, ее часто не хранят (это так называемый скрытый бит), экономя разряды.
Стандарт IEEE 754 (самый распространенный):
** single precision (одинарная точность, 32 бита):**
1 бит – знак.
8 бит – смещенный порядок (смещение = 127).
23 бита – мантисса (без ведущей единицы).
double precision (двойная точность, 64 бита):
1 бит – знак.
11 бит – смещенный порядок (смещение = 1023).
52 бита – мантисса.
Пример (упрощенно): Представить число -13.25 в 32-битном формате.
Переведем число в двоичную систему:
Целая часть: 13 -> 1101
Дробная часть: 0.25 -> .01
Итого: 1101.01
Нормализуем: 1101.01 = 1.10101 * 2^3 (сдвинули запятую на 3 разряда влево).
Мантисса: .10101 (ведущую единицу отбросим)
Порядок: 3
Рассчитаем смещенный порядок: 3 + 127 = 130. Переведем 130 в двоичный вид: 10000010.
Знак: отрицательное число -> 1.
Собираем результат:
Знак: 1
Порядок: 10000010
Мантисса: 10101000000000000000000 (добиваем оставшиеся разряды нулями до 23 бит).
Итоговое представление: 1 10000010 10101000000000000000000
Видео урок по данному уроку от учителя информатики Трашкова Олега Леонидовича