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

§ 8. Кодирование чисел. Представление чисел (беззнаковых и целых) в памяти компьютера

"Информатика (в 2-х частях)", Горячев А.В., Герасимова В.Г., Макарина Л.А., Островский С.Л., Паволоцкий А.В., Семёнов А.А., Юдина А.Г., Чернышёва Т.Л.

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

Кратко о теме

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

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

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

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

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

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

Знаковое целое число — целое число, для которого предусмотрено представление положительных и отрицательных значений. В дополнительном коде старший разряд помогает определить знак: при 0 число неотрицательное, при 1 — отрицательное. Остальные разряды тоже входят в кодирование числа, поэтому их нельзя просто читать как запись модуля.

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

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

У каждого бита есть два возможных состояния, и выбор в одном разряде не ограничивает выбор в другом. Для двух битов это 2 × 2 = 4 сочетания, для трёх — 2 × 2 × 2 = 8. Поэтому для n битов число вариантов равно 2ⁿ: столько разных значений можно закодировать, если каждому варианту назначить отдельное значение.

В беззнаковом коде все комбинации распределяются по неотрицательным числам, начиная с нуля. Самая маленькая комбинация — набор из одних нулей, а самая большая — из одних единиц. Её значение равно 2ⁿ − 1, поэтому диапазон составляет от 0 до 2ⁿ − 1. Двоичную запись числа помещают в отведённые разряды, добавляя слева нули, если запись короче кода.

Чтобы представить отрицательное число в дополнительном коде, сначала записывают его модуль с заданным количеством разрядов. Затем каждый бит инвертируют и к полученному числу прибавляют единицу. Например, при восьми битах модуль числа 13 записывается как 00001101, после инверсии получается 11110010, а после прибавления единицы — 11110011. Длина записи важна: сначала нужно получить запись модуля именно с нужным числом разрядов.

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

Битовая последовательность не содержит отдельной надписи о том, как её понимать: это задаёт тип данных и длина кода. Например, 11111101 при восьми разрядах как беззнаковое число равно 253. Если тот же набор трактовать как знаковый, старший бит показывает отрицательное значение, и результат равен −3. Поэтому перед вычислением нужно выяснить, какой именно тип числа задан.

Представление целых чисел в памяти

СвойствоБеззнаковое число из n битЗнаковое число из n бит
Назначение разрядовВсе разряды кодируют величинуКодируют значение со знаком; старший разряд связан со знаком
Минимальное значение0−2ⁿ⁻¹
Максимальное значение2ⁿ − 12ⁿ⁻¹ − 1
Количество представимых значений2ⁿ2ⁿ
Способ кодирования отрицательных чиселНе предусмотренДополнительный код

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

Разбор задач

Задача 1. Записать число 25 в виде беззнакового числа длиной 8 бит. Нужно получить двоичную запись числа, поскольку память хранит код из нулей и единиц. Затем проверим, что в записи ровно восемь разрядов.

  1. Разложим 25 по степеням двойки: 25 = 16 + 8 + 1. Значит, в разрядах 16, 8 и 1 ставим единицы, а в остальных — нули.
  2. Получаем двоичную запись 11001. В ней пять разрядов, поэтому добавляем слева три нуля: 00011001.
  3. Проверяем длину: в записи восемь битов, а ведущие нули значения числа не меняют.

Ответ: 25 = 00011001 в беззнаковом восьмибитном коде. Нули слева нужны для установленной длины, а не для изменения величины числа.

Задача 2. Представить число −13 в дополнительном коде длиной 8 бит. При отрицательном числе нельзя просто приписать минус к двоичной записи: нужно применить правило дополнительного кода. Начинаем с модуля числа, то есть с 13.

  1. Запишем 13 в двоичной системе: 1101. Дополняем слева нулями до восьми разрядов и получаем 00001101.
  2. Инвертируем каждый бит: нули заменяем единицами, единицы — нулями. Получается 11110010.
  3. Прибавляем единицу: 11110010 + 1 = 11110011. Полученная последовательность имеет нужную длину и является кодом отрицательного числа.

Ответ: −13 в восьмибитном дополнительном коде записывается как 11110011. Чтобы проверить результат, можно прибавить к нему код числа 13: сумма восьми младших битов даст нули.

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

  1. Для беззнакового значения разряды соответствуют весам 128, 64, 32, 16, 8, 4, 2, 1. Единицы стоят во всех разрядах, кроме веса 2, поэтому сумма равна 128 + 64 + 32 + 16 + 8 + 4 + 1 = 253.
  2. Для знакового значения старший бит равен 1, следовательно, число отрицательное. Инвертируем байт: 00000010, прибавляем единицу и получаем модуль 00000011, то есть 3.
  3. Так как исходный код был отрицательным, найденному модулю ставим знак минус. Это даёт −3.

Ответ: беззнаковое значение байта — 253, знаковое — −3. Разница возникает не из-за изменения битов, а из-за разных правил интерпретации.

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

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

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

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

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

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

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

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

  • n бит образуют 2ⁿ различных комбинаций.
  • Беззнаковый диапазон для n бит: от 0 до 2ⁿ − 1.
  • Знаковый диапазон в дополнительном коде: от −2ⁿ⁻¹ до 2ⁿ⁻¹ − 1.
  • Отрицательное число в дополнительном коде получают инверсией битов модуля и прибавлением единицы.
  • Один и тот же набор битов может иметь разные значения при разных способах интерпретации.
  • Число должно помещаться в диапазон, заданный длиной кода.

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

Почему при n битах получается именно 2ⁿ комбинаций?

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

Как определить, сколько бит нужно для хранения числа?

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

Почему максимальное беззнаковое число равно 2ⁿ − 1?

Всего n битами можно записать 2ⁿ комбинаций. Одна из них — число 0, поэтому остальные коды соответствуют числам от 1 до 2ⁿ − 1.

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

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

Почему один и тот же байт может означать разные числа?

Битовая последовательность сама по себе не сообщает, считать ли её беззнаковой или знаковой. Например, 11111101 — это 253 без знака, но −3 в восьмибитном дополнительном коде.

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

§ 8. Кодирование чисел. Представление чисел (беззнаковых и целых) в памяти компьютера

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

Учебник

Оглавление →
Предмет
Информатика
Класс
8 класс
Учебник
"Информатика (в 2-х частях)", Горячев А.В., Герасимова В.Г., Макарина Л.А., Островский С.Л., Паволоцкий А.В., Семёнов А.А., Юдина А.Г., Чернышёва Т.Л.