"Информатика (изд. "БИНОМ. Лаборатория знаний")", Угринович Н.Д.
Компьютер хранит числа не в привычной десятичной записи, а как последовательности нулей и единиц. Такой способ называется двоичным кодированием: он подходит электронным элементам с двумя устойчивыми состояниями. Чтобы понять, какие числа помещаются в ячейку памяти, нужно учитывать число разрядов и способ кодирования. Целые и вещественные числа представляют по-разному, поэтому отличаются и их диапазон, и точность.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Позиционная система счисления — система, в которой значение цифры зависит от её места в записи числа. Основание системы показывает, сколько разных цифр в ней используется: в десятичной их десять, а в двоичной — две. Каждый следующий разряд справа налево вдвое важнее предыдущего в двоичной системе. Это помогает понять, как из отдельных цифр складывается значение числа.
Двоичное кодирование числа — представление числовой информации последовательностью нулей и единиц. Каждая такая цифра называется битом и соответствует одному из двух возможных состояний электронного элемента. Двоичное кодирование нужно, чтобы компьютер мог хранить числа и выполнять над ними действия. Обычную десятичную запись для этого переводят в подходящий двоичный вид.
Дополнительный код — способ представления отрицательных целых чисел, при котором их код можно использовать при сложении и вычитании. Чтобы получить его, положительное число записывают с нужным количеством разрядов, инвертируют биты и прибавляют единицу. Такой способ позволяет компьютеру выполнять арифметические действия по общим правилам двоичного сложения. Знак числа при этом не требует отдельного алгоритма для каждого действия.
Представление числа с плавающей запятой — запись вещественного числа через мантиссу и порядок. Мантисса содержит значащие цифры, а порядок указывает, насколько нужно сдвинуть запятую. Например, число 1250 можно записать как 1,25 × 10³. Такой формат позволяет хранить очень большие и очень маленькие числа, но количество значащих цифр ограничено.
Электронным элементам компьютера надёжнее различать два устойчивых состояния, чем множество разных уровней сигнала. Например, состояние можно определить как «сигнал есть» или «сигнала нет» и обозначить 1 и 0. Поэтому двоичная система естественно подходит для хранения информации в памяти и её передачи между устройствами. Из таких простых состояний компьютер строит коды чисел и выполняет над ними операции.
Чтобы перевести целое десятичное число в двоичное, его делят на 2, потому что основание двоичной системы равно двум. Остаток каждого деления — 0 или 1 — становится очередным двоичным разрядом. Первым получают младший разряд, то есть цифру справа, поэтому остатки записывают в обратном порядке. Деление продолжают, пока частное не станет нулём.
В ячейке памяти можно разместить лишь конечное число битов. Если разрядов n, существует 2ⁿ различных последовательностей, поэтому число представимых значений тоже ограничено. Часть кодов может отводиться для отрицательных чисел, и конкретный диапазон зависит от выбранного способа представления. Добавление разрядов увеличивает количество доступных кодов, но не меняет основание системы: оно остаётся равным двум.
Дополнительный код помогает представить отрицательное целое число так, чтобы сложение выполнялось по правилам двоичной арифметики. Сначала выбирают одинаковую длину кода и записывают модуль числа, затем меняют каждый бит на противоположный и прибавляют единицу. Например, для −5 в восьми разрядах получают код 11111011. Фиксированное число разрядов важно: при другой длине запись и возможный диапазон будут другими.
У вещественного числа может быть много цифр до или после запятой, поэтому хранить его целиком неудобно. Мантисса записывает значащую часть, а порядок позволяет перемещать запятую и задавать масштаб числа. При ограниченной длине мантиссы часть цифр приходится отбросить или округлить, поэтому значение в памяти может быть приближённым. Длина порядка влияет на доступный диапазон, а длина мантиссы — прежде всего на точность.
| Характеристика | Целые числа | Вещественные числа |
|---|---|---|
| Способ представления | Двоичный код фиксированной длины | Двоичная запись с плавающей запятой |
| Какие части записи используются | Разряды числа | Мантисса и порядок |
| Как представляют отрицательные значения | Обычно дополнительным кодом | Знаком, мантиссой и порядком |
| От чего зависит диапазон значений | От числа разрядов и способа кодирования | От числа разрядов, отведённых под порядок |
| От чего зависит точность | От шага между целыми значениями; дробные значения не представляются | От числа разрядов мантиссы |
Таблица помогает сравнить не только запись чисел, но и ограничения каждого формата. Для целых чисел при оценке диапазона учитывай число разрядов и кодирование знака. Для вещественных чисел отдельно смотри на порядок, который задаёт масштаб, и мантиссу, от которой зависит точность.
Нужно найти двоичную запись числа 13. Для этого последовательно делим его на 2 и сохраняем остаток каждого деления. Остатки будем читать с конца, потому что первые из них относятся к младшим разрядам.
Ответ: 13₁₀ = 1101₂. Проверка обратным переводом подтверждает результат, потому что разряды двоичного числа соответствуют степеням двойки. Такая проверка помогает заметить ошибку в порядке остатков.
В условии задан отрицательный знак и длина ячейки — восемь разрядов. Сначала кодируем модуль числа, то есть 5, с тем же количеством битов. Затем инвертируем все биты и прибавляем единицу; пропуск любого из этих шагов даст другой код.
Ответ: дополнительный код числа −5 — 11111011. Проверить знак можно по старшему разряду: для отрицательного числа в таком формате он равен 1. При этом результат зависит от указанной длины ячейки, поэтому её нельзя менять по ходу решения.
Десятичное число состоит из целой части 13 и дробной части 0,25. Целую часть переводим делением на 2, а дробную — умножением на 2 с записью целых частей результатов. Затем объединяем части и переносим запятую, чтобы получить запись с мантиссой и порядком.
Ответ: 13,25₁₀ = 1101,01₂, или 1,10101₂ × 2³ в нормализованной записи с плавающей запятой. Проверка дробной части: 0,01₂ = 1/4 = 0,25. В реальной ячейке мантисса и порядок занимают ограниченное число разрядов, поэтому не каждое число удаётся сохранить точно.
Остатки при переводе делением на 2 иногда читают в том же порядке, в каком они получены. Так происходит потому, что остатки записываются по мере вычисления, хотя первый из них относится к разряду справа. Читай список снизу вверх и проверь результат обратным переводом в десятичную систему.
Увеличение числа разрядов иногда принимают за смену основания системы счисления. Разрядность показывает длину кода, а основание определяет набор цифр и правила разрядов; в двоичной системе оно по-прежнему равно 2. Для самопроверки посчитай, какими цифрами записано число и какое основание задано.
При получении дополнительного кода можно остановиться после инвертирования битов. Ошибку допускают, потому что инверсия выглядит как завершённое преобразование, но по правилу нужно ещё прибавить единицу. Проверь алгоритм по двум шагам и сложи полученный код с единицей до инверсии в соответствии с заданным форматом.
Вещественные числа нередко считают точными сразу после сохранения в памяти. На деле ограниченная длина мантиссы может заставить компьютер округлить число, особенно если его двоичная дробная запись бесконечна. Проверяй, совпадает ли записанное значение с исходным и может ли округление повлиять на результат вычислений.
Перед изучением кодирования чисел нужно знать, что такое разряды и основание позиционной системы, а также уметь переводить числа между системами счисления. Эти навыки позволяют самостоятельно читать двоичные коды и проверять переводы. Двоичное кодирование понадобится при изучении логических операций, устройства памяти и арифметики компьютера. Представление вещественных чисел пригодится при программировании вычислений и разборе погрешностей: оно объясняет, почему результат иногда отличается от ожидаемого.
Почему компьютер использует двоичную систему счисления?
Электронным элементам проще надёжно различать два устойчивых состояния, например наличие и отсутствие сигнала. Их обозначают цифрами 1 и 0, поэтому данные удобно хранить и обрабатывать в двоичном виде.
Как перевести десятичное целое число в двоичное?
Число последовательно делят на 2 и записывают остатки от деления. Когда частное станет равным нулю, остатки читают в обратном порядке — от последнего к первому.
Почему нельзя записать любое целое число в ячейке памяти?
У ячейки памяти конечное число разрядов, а каждый разряд хранит только 0 или 1. Поэтому существует лишь ограниченное число разных кодов, и они охватывают только определённый диапазон целых чисел.
Как получить дополнительный код отрицательного числа?
Сначала записывают соответствующее положительное число в двоичном виде с нужным количеством разрядов. Затем инвертируют все разряды, то есть меняют 0 на 1 и 1 на 0, и прибавляют единицу.
Почему при вычислениях с вещественными числами появляется погрешность?
Для записи вещественного числа отводится ограниченное количество разрядов мантиссы и порядка. Некоторые числа нельзя точно представить в таком формате, поэтому компьютер округляет их, а вычисления могут накапливать погрешность.
4.1. Кодирование числовой информации