На Горох
Информатика, 10 класс

§ 27. Хранение в памяти целых чисел

"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.

Объяснение темы В оглавлении: § 27. Хранение в памяти целых чисел

Кратко о теме

Компьютер хранит целое число как последовательность битов фиксированной длины. Такая длина определяет, сколько памяти займёт число и какие значения можно записать. Неотрицательные числа кодируют обычной двоичной записью, а отрицательные — дополнительным кодом: биты модуля инвертируют и прибавляют единицу. Этот способ позволяет складывать числа разных знаков обычным двоичным сложением. Если результат не помещается в заданное число разрядов, возникает переполнение.

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Бит — минимальная единица хранения информации, которая принимает значение 0 или 1. Последовательность битов служит кодом числа, а выделенное под него число битов задаёт длину записи. Поэтому один и тот же числовой формат всегда занимает определённое место в памяти.

Разрядная сетка — фиксированное количество битов, отведённое для записи числа. Её старший разряд — крайний слева — участвует в определении знака числа в дополнительном коде. Зная число разрядов, можно определить и объём памяти, и границы допустимых значений.

Дополнительный код — способ представления целого числа, при котором отрицательное число кодируют инвертированием двоичной записи его модуля и прибавлением единицы. Модуль — это величина числа без знака, например модуль −13 равен 13. Такой код нужен, чтобы компьютер мог выполнять сложение чисел разных знаков по общим двоичным правилам.

Переполнение — ситуация, когда результат вычисления выходит за диапазон чисел, представимых в данной разрядной сетке. Например, при ограничении от −128 до 127 результат 150 уже не помещается. Понимание переполнения помогает объяснить, почему значение в программе иногда отличается от обычного математического результата.

Как это устроено

Количество бит фиксируют заранее, потому что память компьютера организована как набор ячеек определённого размера, а программе нужно знать, сколько места занимает значение. При фиксированной длине каждой позиции соответствует конкретный разряд, поэтому операции можно выполнять над одинаковыми по размеру кодами. Но конечное число битов означает конечное число возможных комбинаций: увеличить диапазон без увеличения разрядности нельзя.

Неотрицательное число записывают обычным двоичным кодом, а свободные позиции слева заполняют нулями. Нули не меняют величину числа, зато запись становится равной длине разрядной сетки. Например, двоичное число 1101 в восьми разрядах выглядит как 00001101. Благодаря одинаковой длине коды можно хранить и обрабатывать в одном формате.

Чтобы получить дополнительный код отрицательного числа, сначала записывают его модуль в двоичной системе на заданном количестве разрядов. Затем каждый 0 заменяют на 1, а каждый 1 — на 0, после чего к полученному коду прибавляют единицу. Эти действия задают код отрицательного числа именно для выбранной разрядной сетки, поэтому при смене её длины запись может измениться.

Дополнительный код удобен для арифметики, потому что сложение чисел с разными знаками сводится к обычному двоичному сложению их кодов. Компьютеру не требуется отдельно сравнивать модули и выбирать особое правило для каждого сочетания знаков. Если результат помещается в разрядную сетку, его биты уже представляют ответ в том же формате; перенос за пределы сетки отбрасывают.

В n-разрядном дополнительном коде старший разряд отводится под знак, поэтому диапазон равен от −2^(n−1) до 2^(n−1)−1. Отрицательных значений на одно больше, чем неотрицательных, потому что код нуля входит в неотрицательную часть. Проверяя результат операции, нужно сравнить его с обеими границами: если он меньше нижней или больше верхней, происходит переполнение и представление не соответствует математическому ответу.

Целые числа в дополнительном коде

Сначала найдите в таблице число разрядов и соответствующие ему границы: без этого нельзя решить, поместится ли значение в формате. Для кодирования положительного числа используйте двоичную запись с нулями слева, а для отрицательного выполните инверсию и прибавление единицы. Последние строки показывают, как эти правила применяются к нулю и паре чисел 13 и −13.

Что рассматриваемПравило или результат
Количество разрядовЗадаётся заранее; все числа в формате занимают одинаковое число битов n.
Диапазон значений для n разрядовОт −2^(n−1) до 2^(n−1)−1.
Запись неотрицательного числаОбычный двоичный код дополняют нулями слева до n разрядов.
Получение кода отрицательного числаЗаписывают модуль на n разрядах, инвертируют биты и прибавляют единицу.
Код нуля000…000; у нуля одна запись.
Пример: 13 и −13 в 8 разрядах13: 00001101; −13: 11110011.

Разбор задач

Задача 1. Записать число 13 в виде восьмиразрядного двоичного кода.

  1. Переведём число в двоичную систему: 13 = 8 + 4 + 1, значит, двоичная запись — 1101.
  2. Сравним длину записи с требуемой. В 1101 четыре разряда, а нужно восемь, поэтому добавим слева четыре нуля.
  3. Получим код 00001101. Нули слева не меняют значение, но выравнивают запись по заданной длине.

Ответ: 13 в восьми разрядах записывается как 00001101.

Задача 2. Получить восьмиразрядный дополнительный код числа −13.

  1. Берём модуль числа: |−13| = 13. Его восьмиразрядная двоичная запись — 00001101.
  2. Инвертируем каждый бит: 00001101 превращается в 11110010. На этом шаге код ещё не завершён.
  3. Прибавляем единицу: 11110010 + 1 = 11110011. Результат остаётся в пределах восьми разрядов.

Ответ: дополнительный код числа −13 — 11110011. Порядок действий важен: если ограничиться инверсией, получится другой код.

Задача 3. Для восьмиразрядных целых чисел проверить, представим ли результат 100 + 50, и объяснить полученный результат при вычислении в этом формате.

  1. Найдём математическую сумму: 100 + 50 = 150.
  2. Определим диапазон для восьми разрядов: от −2⁷ = −128 до 2⁷ − 1 = 127.
  3. Сравним результат с верхней границей. 150 больше 127, поэтому в формате восьмиразрядного дополнительного кода этот результат как положительное число не представим.
  4. При сложении кодов 01100100 и 00110010 получается 10010110. Если прочитать эту восьмиразрядную последовательность как число в дополнительном коде, она означает −106, а не 150: произошло переполнение.

Ответ: 150 не помещается в диапазон от −128 до 127; вычисление в восьми разрядах приводит к переполнению и некорректному для исходного формата результату.

Типичные ошибки

Ошибка — считать, что старший бит сам по себе показывает модуль числа или что оставшиеся биты можно прочитать как обычное двоичное число. Так рассуждают, перенося на дополнительный код привычную запись числа со знаком. Проверяйте отрицательный код по правилу инверсии и прибавления единицы либо складывайте его с кодом противоположного числа: сумма должна дать нулевой код с учётом разрядности.

Ошибка — после инверсии битов забыть прибавить единицу. Это происходит, когда первое действие принимают за весь алгоритм. Чтобы проверить запись, пройдите обе операции и убедитесь, что к инвертированному коду действительно добавлена единица; например, −13 в восьми разрядах — 11110011, а не 11110010.

Ошибка — записывать число, не учитывая заданную разрядность. Короткая двоичная запись может показывать величину, но не является кодом нужной длины и не позволяет верно проверить допустимый диапазон. Сначала установите n, затем дополните запись нулями или выполните преобразование кода на n разрядах.

Ошибка — ожидать, что при переполнении компьютер автоматически добавит разряд или сохранит правильный математический ответ. Такое ожидание возникает из обычной арифметики, где длина записи не ограничена. Проверяйте результат сравнением с границами формата; если он выходит за них, нужно признать переполнение, а не считать сохранённые биты точным ответом.

Связь с другими темами

Для работы с дополнительным кодом нужно уметь переводить целые числа из десятичной системы счисления в двоичную и обратно. Это знание помогает получить записи модулей, а также прочитать результат, хранящийся в битах. Двоичное сложение и вычитание объясняют, почему дополнительный код упрощает арифметические операции. В программировании эта тема нужна для понимания целочисленных типов данных и ограничений разрядности компьютерных устройств.

Что запомнить

  • Целое число хранится в записи фиксированной длины.
  • Для n-разрядного дополнительного кода диапазон равен от −2^(n−1) до 2^(n−1)−1.
  • Неотрицательные числа записывают обычным двоичным кодом с дополнением нулями слева.
  • Код отрицательного числа получают инвертированием кода его модуля и прибавлением единицы.
  • В дополнительном коде ноль имеет одну запись.
  • Если результат выходит за допустимый диапазон, возникает переполнение.

Частые вопросы по теме

Почему для хранения целого числа заранее задают количество бит?

Фиксированная длина позволяет заранее выделить под число определённый объём памяти и одинаково обрабатывать значения. Она же задаёт границы диапазона: число за этими границами нельзя корректно представить в выбранном формате.

Как из двоичной записи положительного числа получить код отрицательного?

Запишите модуль числа в двоичном виде на нужном количестве разрядов, дополнив слева нулями. Затем инвертируйте все биты и прибавьте к полученной записи единицу.

Зачем после инвертирования битов прибавлять единицу?

Инверсия сама по себе не даёт представление, при котором сложение работает для чисел разных знаков как обычное двоичное сложение. Прибавление единицы завершает получение дополнительного кода и обеспечивает нужное поведение арифметики.

Как найти диапазон чисел, которые помещаются в заданное количество разрядов?

Для n разрядов в дополнительном коде нижняя граница равна −2^(n−1), а верхняя — 2^(n−1)−1. Например, при n = 8 получаем диапазон от −128 до 127.

Что происходит, если результат арифметической операции выходит за этот диапазон?

Возникает переполнение: результат в заданном формате не соответствует математическому результату. Разрядность сама собой не увеличивается, поэтому записанные биты могут означать другое число.

Спросить по теме параграфа

§ 27. Хранение в памяти целых чисел

Эта же тема в других учебниках

Учебник

Оглавление →
Предмет
Информатика
Класс
10 класс
Учебник
"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.