Все разделы
Выбрать школу

Школа. Увлечения. Большое будущее.

PROSCHOOLS · ОБРАЗОВАНИЕ РЯДОМ

Ваш город

Выберите город, чтобы находить образование и возможности рядом.

Как учитываем городКаталог и кнопки «Выбрать школу» покажут школы выбранного города.Онлайн-курсы, учебник, ГДЗ и задания к экзаменам доступны по всей России.

Популярные города

Будет выбран: Вся Россия

Учебные материалы останутся прежними.

Поиск по сайту

По всему сайтуШколы выбранного города — выше в результатах

С чего начнём?

↑ ↓ — выбрать результат · Enter — открыть · Esc — закрыть

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

💻 Информатика · 7 класс

Как целое число занимает байты памяти и сколько значений помещается в разряды.

Клавиатура в компьютерном классе
Клавиатура в компьютерном классеHmartil · Wikimedia Commons · CC BY-SA 4.0

Целые числа в памяти компьютера

Любая информация в компьютере хранится в виде нулей и единиц — битов. Целые числа не исключение: они записываются в двоичной системе счисления и занимают определённое количество разрядов (битов) памяти. Чем больше разрядов отведено под число, тем большее число можно в них записать. Это похоже на то, как на счётах с большим числом костяшек можно показать большее число.

Сколько значений помещается в разрядах

В одном разряде (бите) помещается один из двух знаков: 0 или 1. В двух разрядах получается уже четыре комбинации: 00, 01, 10, 11. В трёх разрядах — восемь комбинаций. Общее правило простое: N разрядов дают 2^N разных комбинаций, то есть столько различных чисел можно ими закодировать.

Число разрядовФормулаСколько значений
12^12
22^24
32^38
42^416
82^8256

Каждый добавленный разряд удваивает количество возможных значений. Поэтому числа растут очень быстро: всего восемь разрядов уже дают 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.
  • Наибольшее число на единицу меньше количества значений.

Источники и материалы