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

§ 23. Представление целых чисел в памяти компьютера

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

Объяснение темы В оглавлении: § 23. Представление целых чисел в памяти компьютера

Кратко о теме

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

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

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

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

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

Беззнаковое представление — способ кодирования, при котором все разряды участвуют в записи неотрицательного числа. Каждый бит имеет обычный вес: справа налево это 1, 2, 4, 8 и так далее. Такой вариант нужен, когда отрицательные значения не требуются и весь набор битов можно отдать величине.

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

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

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

Число занимает заранее определённое количество битов, потому что память и команды процессора работают с ячейками фиксированного размера. Если выделено n битов, каждый из них имеет свой вес — степень двойки от 2⁰ до 2ⁿ⁻¹. Значение записи получают сложением весов тех разрядов, в которых стоят единицы, поэтому изменение длины ячейки меняет и возможный диапазон.

В беззнаковом представлении нет разряда для знака, поэтому используются все n битов. Минимальная запись состоит из одних нулей и даёт 0, а максимальная — из одних единиц и даёт 2ⁿ−1. Например, при 8 битах диапазон равен 0…255, потому что 11111111₂ = 128+64+32+16+8+4+2+1.

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

Для получения дополнительного кода числа −a сначала записывают модуль a в полной разрядной сетке, затем меняют нули на единицы и единицы на нули, после чего прибавляют единицу. Чтобы восстановить число из записи со старшим битом 1, выполняют те же действия над её битами и ставят знак «минус». Нулевая запись остаётся нулём, а результат каждого действия сохраняется только в отведённых разрядах.

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

Способы представления целых чисел в памяти компьютера

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

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

Разбор задач

Задача 1. Представим число 13 в восьмиразрядной беззнаковой ячейке памяти. Нужно перевести число в двоичную систему, а затем занять все восемь разрядов, добавив нули слева. Старший разряд здесь не является знаком.

  1. Разложим 13 по степеням двойки: 13 = 8 + 4 + 1.
  2. Значит, в разрядах 8, 4 и 1 стоят единицы: 1101₂.
  3. Дополняем запись слева до восьми битов: 00001101₂.

Ответ: 13₁₀ = 00001101₂ в восьмиразрядном беззнаковом представлении. Ведущие нули не изменяют значение, но обеспечивают полный размер ячейки.

Задача 2. Получим восьмиразрядный дополнительный код числа −13 и определим значение записи 11110011₂. В обоих случаях важно работать со всеми восемью битами, иначе инверсия будет выполнена неполностью.

  1. Записываем модуль: 13 = 00001101₂.
  2. Инвертируем биты: 11110010₂.
  3. Прибавляем единицу: 11110010₂ + 1 = 11110011₂.

Ответ: −13 имеет код 11110011₂. Для обратного чтения этой записи инвертируем её и прибавляем единицу: 00001100₂ + 1 = 00001101₂ = 13, поэтому исходное число равно −13.

Задача 3. Выполним в восьмиразрядной знаковой сетке сложение 01111111₂ и 00000001₂. Обе записи имеют старший бит 0, значит, до сложения они обозначают положительные числа 127 и 1. Математическая сумма равна 128, но она не входит в диапазон −128…127.

  1. Складываем записи: 01111111₂ + 00000001₂ = 10000000₂.
  2. Получившийся старший бит равен 1, поэтому запись выглядит как отрицательное число.
  3. Положительная сумма превратилась в запись со знаком минус, что показывает выход за верхнюю границу.

Ответ: результат в ячейке равен 10000000₂, то есть −128 при интерпретации дополнительного кода. Арифметически правильная сумма 128, поэтому произошло переполнение, а сохранённая восьмиразрядная запись не отражает настоящий результат.

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

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

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

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

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

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

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

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

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

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

  • Количество битов задаёт разрядную сетку и диапазон представимых чисел.
  • В n-разрядном беззнаковом представлении диапазон равен от 0 до 2ⁿ−1.
  • В знаковом представлении старший разряд связан со знаком числа.
  • Отрицательные числа обычно хранятся в дополнительном коде.
  • Диапазон n-разрядных знаковых чисел равен от −2ⁿ⁻¹ до 2ⁿ⁻¹−1.
  • Переполнение возникает, когда результат не помещается в отведённое число разрядов.
  • Одна и та же битовая последовательность может обозначать разные числа в зависимости от выбранного способа представления.

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

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

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

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

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

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

Один бит используется для знака, поэтому остаётся семь битов для кодирования величины. В дополнительном коде ноль имеет только одну запись, а код 10000000₂ обозначает −128, поэтому отрицательный диапазон шире на одно значение.

Как по двоичной записи понять, что произошло переполнение?

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

Может ли одна и та же последовательность битов обозначать разные числа?

Да. Например, запись 11111111₂ означает 255 в восьмиразрядном беззнаковом представлении и −1 в дополнительном коде. Значение зависит не только от битов, но и от выбранного способа их интерпретации.

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

§ 23. Представление целых чисел в памяти компьютера

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

Учебник

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