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

Коротко: целые числа в оперативной памяти — это просто фиксированное количество бит (обычно 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