Представление целых чисел в памяти компьютера
💻 Информатика · 7 класс
Как целое число занимает байты памяти и сколько значений помещается в разряды.

Целые числа в памяти компьютера
Любая информация в компьютере хранится в виде нулей и единиц — битов. Целые числа не исключение: они записываются в двоичной системе счисления и занимают определённое количество разрядов (битов) памяти. Чем больше разрядов отведено под число, тем большее число можно в них записать. Это похоже на то, как на счётах с большим числом костяшек можно показать большее число.
Сколько значений помещается в разрядах
В одном разряде (бите) помещается один из двух знаков: 0 или 1. В двух разрядах получается уже четыре комбинации: 00, 01, 10, 11. В трёх разрядах — восемь комбинаций. Общее правило простое: N разрядов дают 2^N разных комбинаций, то есть столько различных чисел можно ими закодировать.
| Число разрядов | Формула | Сколько значений |
|---|---|---|
| 1 | 2^1 | 2 |
| 2 | 2^2 | 4 |
| 3 | 2^3 | 8 |
| 4 | 2^4 | 16 |
| 8 | 2^8 | 256 |
Каждый добавленный разряд удваивает количество возможных значений. Поэтому числа растут очень быстро: всего восемь разрядов уже дают 256 вариантов.
Байт и числа
Один байт — это восемь битов. В одном байте помещается 2^8 = 256 различных значений. Если кодировать неотрицательные целые числа, то в байте умещаются числа от 0 до 255 — всего 256 значений, если считать вместе с нулём. Чтобы хранить числа больше 255, отводят два байта, четыре байта и более.
Примеры записи небольших чисел в одном байте (восемь разрядов):
число 5 → 00000101
число 10 → 00001010
число 255 → 11111111
Чтобы записать число в двоичном виде, его раскладывают по разрядам так же, как в десятичной системе раскладывают по единицам, десяткам и сотням, только основанием служит двойка. Поэтому в записи появляются только нули и единицы, а каждый разряд отвечает за свою степень двойки.
Знание того, сколько чисел помещается в заданное число разрядов, помогает решать практические задачи: например, понять, хватит ли одного байта для хранения возраста человека (хватит, ведь возраст меньше 255) или нужно отвести больше памяти под население города. Если число не помещается в отведённые разряды, происходит переполнение, и результат искажается, поэтому количество разрядов выбирают заранее с запасом.
Частая ошибка. Восемь разрядов кодируют 256 значений, но наибольшее число при этом равно 255, а не 256. Так получается потому, что отсчёт начинается с нуля: значения идут от 0 до 255, и ноль тоже считается одним из значений.
Отрицательное целое в дополнительном коде
Зададим разрядность: ровно 8 бит, дополнительный код. Диапазон такой модели — от −128 до 127. Для отрицательного числа −x можно записать 256 − x в восьмибитном виде. Здесь 256 — число всех комбинаций, а не ещё один доступный разряд.
Редакционный пример: −13
Положительное 13 записывается как 00001101. Инвертируем все восемь бит: 11110010. Прибавляем единицу: 11110011. Проверка вторым способом: беззнаковое значение этой цепочки 243; в выбранном знаковом представлении 243 − 256 = −13.
Не приписывайте дополнительную единицу слева: разрядов по-прежнему восемь. Для обратного чтения цепочки со старшим битом 1 найдите её беззнаковое значение и вычтите 256. Например, 10000000 даёт 128 − 256 = −128. В этой модели нет отдельного отрицательного нуля.
Та же цепочка — другая интерпретация
11111111 означает 255 в восьмибитном беззнаковом формате и −1 в восьмибитном дополнительном коде. Поэтому фраза «в одном байте числа только от 0 до 255» относится к выбранному беззнаковому кодированию, а не к любому смыслу этих битов.
Целочисленные типы C
В C есть signed char, short, int, long, long long и соответствующие беззнаковые типы. Нельзя переносить таблицу размеров одной платформы на все реализации. sizeof(int) показывает размер в байтах C; CHAR_BIT — число битов в таком байте, а INT_MIN, INT_MAX, UINT_MAX из <limits.h> — границы конкретных типов.
Обычный char не обязан вести себя как signed char. Для арифметики с беззнаковым результирующим типом C задаёт сведение по модулю числа представимых значений. Переполнение знаковой арифметики не следует проверять опытом «на моём компьютере обернулось»: стандартный C не гарантирует такой результат.
Самостоятельно: запишите −6 в нашей восьмибитной модели. Ответ: 11111010, поскольку 256 − 6 = 250. Это упражнение на выбранный способ кодирования, а не универсальная инструкция о размере int.
Справочные материалы: Целые числа в памяти компьютера — исходная тема; Целые числа в памяти компьютера — исходная тема. Связанные уроки: Что такое формат файла, Циклы с известным числом повторений.
Источник проверки: WG14 N1570: типы C, пределы и арифметика.
Кратко о главном
- Целые числа хранятся в двоичном виде в разрядах памяти.
- В N разрядах помещается 2 в степени N различных значений.
- Каждый новый разряд удваивает число вариантов.
- Байт — это 8 битов, в нём 256 значений.
- В восьми битах при беззнаковом кодировании целых умещаются значения от 0 до 255.
- Наибольшее число на единицу меньше количества значений.