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

Лабораторная работа № 5 (к § 23) Представление целых чисел в памяти компьютера. Особенности компьютерной арифметики

"Информатика (базовый и углублённый уровень)", Гейн А.Г., Сенокосов А.И.

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

Кратко о теме

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

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

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

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

Разрядная сетка — фиксированное количество битов, отведённое для хранения целого числа. Если выделено n битов, возможны 2ⁿ различных комбинаций. Поэтому разрядная сетка заранее ограничивает диапазон значений.

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

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

Дополнительный код отрицательного числа получают из его положительного кода: сначала инвертируют биты, затем прибавляют единицу. Именно этот вариант обычно используется для хранения знаковых целых чисел. Он позволяет складывать коды по обычным правилам двоичного сложения.

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

Количество битов ограничивает диапазон потому, что каждый бит может иметь только два состояния: 0 или 1. Для n битов число комбинаций равно 2ⁿ, а каждая комбинация может соответствовать только одному коду. Часть кодов в знаковой системе занимает отрицательные числа, поэтому диапазон определяется не только количеством комбинаций, но и выбранным способом кодирования.

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

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

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

Представление целых чисел в разных кодах

ХарактеристикаПрямой кодОбратный кодДополнительный код
Способ представления положительного числаЗнак 0 и двоичный модульСовпадает с прямым кодомСовпадает с прямым кодом
Способ представления отрицательного числаЗнак 1 и двоичный модульИнверсия разрядов модуляИнверсия разрядов и прибавление 1
Роль старшего разрядаТолько знакЗнак, остальные разряды инвертированыЗнак и отрицательный вес −2ⁿ⁻¹
Наличие двух нулейЕсть: +0 и −0Есть: +0 и −0Нет, ноль один
Выполнение сложенияНужна отдельная обработка знаковВозможна коррекция переносаОбычное двоичное сложение
Диапазон при фиксированном числе разрядов−(2ⁿ⁻¹ − 1) … 2ⁿ⁻¹ − 1−(2ⁿ⁻¹ − 1) … 2ⁿ⁻¹ − 1−2ⁿ⁻¹ … 2ⁿ⁻¹ − 1
Основное применение в компьютерной арифметикеНаглядное представлениеИсторические и учебные системыСовременное хранение знаковых целых

Таблицу удобно использовать как памятку: сначала определите длину сетки и знак числа, затем выберите правило формирования кода. Для вычислений особенно важен последний столбец, поскольку дополнительный код совпадает с принципом работы большинства процессоров. При сравнении диапазонов учитывайте, что в дополнительном коде есть отдельный код для −2ⁿ⁻¹.

Разбор задач

Задача 1. Число 37 в восьмиразрядной сетке

Нужно представить 37 в двоичной системе и получить его коды во всех трёх вариантах. Число положительное, поэтому его старший разряд должен быть равен 0. Для положительного числа прямой, обратный и дополнительный коды совпадают.

  1. Делим 37 на 2 или раскладываем его по степеням двойки: 37 = 32 + 4 + 1, поэтому 37₁₀ = 100101₂.
  2. Дополняем запись слева нулями до восьми разрядов: 00100101.
  3. Так как число положительное, прямой код равен 00100101, обратный код равен 00100101, дополнительный код также равен 00100101.

Ответ: 37₁₀ = 00100101₂; во всех трёх кодах запись одинакова.

Задача 2. Дополнительный код числа −37

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

  1. Код модуля 37 в восьми разрядах: 00100101.
  2. Инвертируем все биты: 11011010.
  3. Прибавляем единицу: 11011010 + 1 = 11011011. Это дополнительный код числа −37.
  4. Для проверки видим старший бит 1, значит число отрицательное. Инвертируем 11011011 и получаем 00100100, прибавляем 1: 00100101 = 37, следовательно, исходное значение равно −37.

Ответ: −37 представляется кодом 11011011, а код 11011011 декодируется как −37.

Задача 3. Сложение −85 и 43

Выполним вычисление в восьмиразрядной сетке и проверим переполнение. Диапазон восьмиразрядного дополнительного кода равен −128 … 127. Математический результат заранее равен −42, он входит в этот диапазон, поэтому переполнения ожидать не следует.

  1. Записываем 85: 01010101. Инвертируем биты и прибавляем единицу: 10101010 + 1 = 10101011, это код −85.
  2. Число 43 в восьми разрядах имеет код 00101011.
  3. Складываем: 10101011 + 00101011 = 11010110. Переноса за пределы восьми разрядов нет.
  4. Декодируем 11010110: после инверсии и прибавления единицы получаем 00101010 = 42, значит результат отрицательный и равен −42.

Ответ: −85 + 43 = −42, код результата 11010110. Переполнения нет, потому что результат находится в диапазоне −128 … 127.

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

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

Забывают прибавить единицу после инверсии. Простая инверсия даёт обратный, а не дополнительный код. Самопроверка проста: после инверсии обязательно выполните ещё один шаг — прибавление 1.

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

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

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

Для работы с кодами нужны перевод между десятичной и двоичной системами, двоичное сложение и умение инвертировать биты. Без этих действий нельзя надёжно сформировать или расшифровать дополнительный код.

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

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

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

  • Число битов разрядной сетки определяет количество возможных кодов и диапазон значений.
  • В дополнительном коде старший разряд 0 обычно обозначает неотрицательное число, а 1 — отрицательное.
  • Дополнительный код отрицательного числа получают инверсией двоичной записи его модуля и прибавлением единицы.
  • Сложение в дополнительном коде выполняется обычным двоичным сложением в пределах заданной разрядной сетки.
  • Перенос за пределы разрядной сетки отбрасывается.
  • Переполнение означает, что истинный результат не помещается в доступный диапазон.
  • Компьютерная арифметика выполняется над кодами фиксированной длины, а не над неограниченными математическими числами.

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

Почему отрицательные числа обычно хранят в дополнительном коде, а не в прямом?

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

Почему при получении дополнительного кода нужно прибавлять именно единицу?

Инвертирование битов даёт обратный код, а прибавление единицы превращает его в дополнительный. Благодаря этому код отрицательного числа имеет правильное двоичное значение при сложении и единственное представление нуля.

Как определить десятичное значение двоичного кода со старшим битом 1?

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

Всегда ли перенос за пределы разрядной сетки означает переполнение?

Нет. Перенос за пределы сетки просто отбрасывают. Переполнение есть только тогда, когда математический результат не входит в диапазон знаковых чисел данной длины.

Почему результат сложения двух допустимых чисел может оказаться неправильным?

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

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

Лабораторная работа № 5 (к § 23) Представление целых чисел в памяти компьютера. Особенности компьютерной арифметики

Учебник

Оглавление →
Предмет
Информатика
Класс
11 класс
Учебник
"Информатика (базовый и углублённый уровень)", Гейн А.Г., Сенокосов А.И.