"Информатика (базовый и углублённый уровень)", Гейн А.Г., Сенокосов А.И.
Компьютер хранит целые числа как последовательности нулей и единиц фиксированной длины. Число битов определяет объём памяти и диапазон возможных значений. Беззнаковый формат используется только для неотрицательных чисел, а дополнительный код позволяет хранить положительные и отрицательные числа и складывать их одной операцией. Главное — научиться читать разрядную сетку, получать дополнительный код и распознавать переполнение.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Бит, или разряд, — двоичный разряд, принимающий значение 0 или 1. Один бит хранит минимальный объём информации, а несколько битов образуют код числа. Например, 8 битов дают 256 возможных комбинаций, поэтому число битов задаёт объём памяти и число доступных кодов.
Разрядная сетка — фиксированная последовательность битов, выделенная для хранения числа. Её длина заранее определяет, сколько комбинаций можно использовать. Поэтому 4-битная и 8-битная сетки представляют разные диапазоны, даже если записываемое число одно и то же.
Беззнаковое представление — способ кодирования целого числа, при котором все биты задают его неотрицательное значение. Отдельного знакового разряда здесь нет: каждый разряд имеет вес степени двойки. Такой формат удобен, когда отрицательные значения не нужны.
Дополнительный код — способ представления целых чисел со знаком, при котором положительные и отрицательные значения помещаются в одну разрядную сетку. Благодаря этому сложение выполняется одной двоичной операцией. Старший разряд помогает определить, относится ли код к неотрицательному или отрицательному числу.
Двоичное число раскладывается по разрядам так же, как десятичное, только основаниями служат степени двойки. Справа налево разряды имеют веса 2⁰, 2¹, 2² и так далее, а значение числа получают сложением весов тех позиций, где стоят единицы. Компьютеру нужна заранее заданная длина, потому что без неё неясно, где начинаются и заканчиваются данные и сколько памяти следует выделить.
В беззнаковом кодировании каждый из n разрядов вносит вклад 0 или соответствующую степень двойки. Максимум получается, когда все биты равны единице: 2⁰ + 2¹ + … + 2ⁿ⁻¹ = 2ⁿ − 1. Поэтому диапазон n-битного беззнакового числа — от 0 до 2ⁿ − 1, а добавление ведущих нулей меняет длину записи, но не значение.
В дополнительном коде неотрицательные числа записываются обычным двоичным способом с ведущими нулями. Для n битов старший разряд имеет особую роль: если он равен 0, код читается как неотрицательный, а если равен 1, код относится к отрицательным. Один код при этом выделяется под минимальное отрицательное число, поэтому диапазон получается несимметричным.
Чтобы получить код отрицательного числа, сначала записывают в сетке его положительный модуль. Затем каждый бит заменяют противоположным: 0 превращается в 1, а 1 — в 0, после чего к результату прибавляют 1. Прибавление единицы превращает обратный код в дополнительный и обеспечивает правильную работу обычного двоичного сложения.
Разрядная сетка не расширяется сама во время вычисления, поэтому результат может оказаться за её пределами. Например, в 8-битном формате со знаком нельзя представить 128, поскольку максимальное положительное значение равно 127. Если математический результат не входит в диапазон, возникает переполнение: сохранённый код остаётся, но его значение уже не совпадает с ожидаемым.
| Свойство | Беззнаковое представление | Представление со знаком в дополнительном коде |
|---|---|---|
| Назначение разрядов | Все разряды задают веса степеней двойки | Старший разряд определяет знак, остальные участвуют в коде числа |
| Диапазон значений | От 0 до 2ⁿ − 1 | От −2ⁿ⁻¹ до 2ⁿ⁻¹ − 1 |
| Представление нуля | 000…000 | 000…000 |
| Представление отрицательных чисел | Не предусмотрено | Модуль инвертируют и прибавляют 1 |
| Действие при выходе результата за диапазон | Возникает переполнение, лишний перенос отбрасывается | Возникает переполнение, код может получить другое знаковое значение |
Сначала определите, какой формат используется: одинаковая последовательность битов в двух форматах может означать разные числа. Затем найдите диапазон по числу разрядов и сравните с результатом вычисления. Таблица особенно полезна при проверке знака старшего бита и выявлении переполнения.
Нужно получить двоичную запись числа и привести её к длине ровно 8 битов. В беззнаковом формате знак отдельно не кодируется, поэтому все разряды используются для значения.
Ответ: 13₁₀ = 00001101₂ в 8-битном беззнаковом представлении.
Сначала кодируется модуль числа, то есть 13, а знак учитывается последующими действиями. Все операции выполняются внутри восьмиразрядной сетки.
Ответ: −13₁₀ представляется кодом 11110011₂. Старший бит равен 1, что согласуется с отрицательным результатом.
Оба операнда имеют старший бит 0, поэтому в дополнительном коде они неотрицательны. Их значения равны 127 и 1, а математическая сумма равна 128. Однако диапазон восьмиразрядных чисел со знаком ограничен значениями от −128 до 127.
Ответ: двоичная операция дала код 10000000₂, но считать его верным представлением суммы 127 + 1 нельзя. Правильный вывод — произошло переполнение.
Считать старший бит знаком всегда. Так ошибаются, перенося правило дополнительного кода в беззнаковый формат. В беззнаковой записи этот бит имеет обычный вес; проверьте сначала выбранный способ кодирования.
Добавлять знак минус к двоичному модулю. Запись вроде −00001101 не является кодом, который хранится в фиксированной сетке. Для проверки инвертируйте модуль и прибавьте единицу.
Забывать прибавить 1 после инверсии. Инверсия даёт обратный код, а не дополнительный. После инверсии выполните сложение с единицей, сохраняя число разрядов.
Считать любое двоичное сложение верным. Лишний перенос не расширяет сетку, а результат может выйти из диапазона. Сравните математическую сумму с допустимыми границами и проверьте изменение знака.
До изучения темы нужны позиционная запись чисел, степени двойки и перевод между десятичной и двоичной системами счисления. Эти навыки позволяют читать веса разрядов и строить коды без механического запоминания.
Представление чисел объясняет, как процессор хранит данные и выполняет арифметические операции в регистрах и ячейках памяти. Формат кода определяет, как одна и та же последовательность битов будет интерпретирована.
Тема связана с переполнением, разрядностью типов данных и точностью вычислений в программах. Понимание диапазонов помогает заранее замечать ошибки при выборе типа и выполнении операций.
Почему для хранения целого числа компьютеру нужно заранее знать количество битов?
Память выделяется блоками фиксированной длины, поэтому компьютер должен знать, сколько разрядов отвести под число. От этого зависят возможный диапазон значений и момент возникновения переполнения.
Чем беззнаковое представление отличается от представления со знаком?
В беззнаковом формате все биты участвуют в записи неотрицательного значения. В дополнительном коде старший разряд связан со знаком, поэтому часть кодов используется для отрицательных чисел.
Зачем отрицательные числа хранят в дополнительном коде?
Дополнительный код позволяет складывать положительные и отрицательные числа одной двоичной операцией, не выделяя отдельную процедуру для знаков. Это упрощает устройство арифметики процессора.
Как получить дополнительный код отрицательного числа?
Сначала запишите модуль числа в выбранной разрядной сетке. Затем инвертируйте все биты и прибавьте 1, сохраняя заданное число разрядов.
Что происходит, если результат сложения выходит за диапазон разрядной сетки?
Возникает переполнение: математический результат нельзя представить имеющимся числом битов. Лишний перенос отбрасывается, и получившийся код может обозначать другое число.
§ 23. Представление целых чисел в памяти компьютера