Как в памяти компьютера представляются целые положительные и отрицательные числа?
Ответы на вопрос
Коротко: целые числа в оперативной памяти — это просто фиксированное количество бит (обычно 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.
Пример (8 бит):
+5 → 00000101
Инверсия → 11111010
+1 → 11111011 — это −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|. Такое представление делает арифметику простой и быстрой на уровне железа.
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili

