Вопрос задан 11.09.2025 в 00:00. Предмет Информатика. Спрашивает Бочкарёва Виктория.

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

Перейти к ответам

Ответы на вопрос

Отвечает Пашкявичюс Герман.

Коротко: целые числа в оперативной памяти — это просто фиксированное количество бит (обычно 8, 16, 32 или 64), интерпретируемых как двоичное число. Для положительных — это «как есть», для отрицательных почти всюду используется представление «дополнительный код» (two’s complement).

Беззнаковые (unsigned)

  • Занимают N бит и трактуются как обычное двоичное число от 0 до 2^N − 1.

  • Пример (8 бит):
    00000101₂ → 5, диапазон 0…255.

Знаковые (signed) — дополнительный код

Почти все современные процессоры и языки используют two’s complement:

  • Старший бит — знак (0 — неотрицательное, 1 — отрицательное), но это не «знак и модуль».

  • Диапазон для N бит: −2^(N−1) … 2^(N−1) − 1.
    Для 8 бит: −128…127; для 32 бит: −2 147 483 648…2 147 483 647; для 64 бит: −9 223 372 036 854 775 808…9 223 372 036 854 775 807.

Как получить отрицательное число в дополнительном коде:

  1. Возьмите двоичное представление модуля.

  2. Инвертируйте все биты.

  3. Прибавьте 1.

Пример (8 бит):
+500000101
Инверсия → 11111010
+111111011 — это −5.
Эквивалентная формула: −x хранится как 2^N − x. Поэтому −1 — это все единицы (11111111), −128 (минимум в 8 бит) — 10000000.

Почему это удобно:

  • Сложение/вычитание работает теми же схемами, что и для беззнаковых: выполняется модуль 2^N.

  • Ноль единственный (000…0), нет «−0».

Положительные числа в signed-типе

Пока старший бит 0, двоичный код совпадает с беззнаковым.
Напр.: 00000101 — это и +5 в signed, и 5 в unsigned.

Переполнение

  • В беззнаковом случае переполнение — это перенос из старшего бита (получается результат по модулю 2^N).

  • В знаковом two’s complement переполнение при сложении двух одинаковых знаков, если знак результата поменялся (например, 127 + 1 в 8 бит даст −128).

Расширение разрядности

  • Беззнаковое: «дополняем нулями» слева (zero extension).

  • Знаковое (two’s complement): «дублируем знак» слева (sign extension).
    Пример: 11111011 (−5 в 8 бит) → 11111111 11111011 (−5 в 16 бит).

Порядок байт (эндиданность)

Эндиданность влияет только на порядок байт в памяти для много байтовых чисел (little-endian — младший байт первым, big-endian — старший первым). Сами биты числа и его интерпретация (signed/unsigned, two’s complement) от этого не меняются.

Альтернативы (почти не используются сегодня)

  • Знак-и-модуль: старший бит — знак, остальные — модуль. Два нуля (+0 и −0), неудобная арифметика.

  • Обратный код (one’s complement): отрицательные — инверсия битов положительного. Тоже два нуля, сложнее обработка переносов.

Итого: положительные — обычный двоичный код; отрицательные — почти всегда дополнительный код, где число хранится как 2^N − |x|. Такое представление делает арифметику простой и быстрой на уровне железа.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос