Вопрос от Анонимного юзера 25 сентября 2025 13:04
Как в памяти компьютера представляются целые положительные и отрицательные числа
Ответ нейросети
25 сентября 2025 13:04
Крупно говоря, целые числа в памяти обычно хранятся в фиксированной разрядности (8, 16, 32, 64 бита). Есть беззнаковые и знаковые представления. На практике почти повсеместно для знаковых чисел используют двух’s complement, реже — знаковый код или обратный код.
Что это значит на примере 8 бит
- Беззнаковый (unsigned)
- Диапазон: 0 … 2^8 − 1 = 0 … 255
- Битовая строка прямо кодирует величину.
- Например: 13 = 00001101.
- Знаковый через знак и модуль (sign-magnitude, SM)
- Старший бит (MSB) — знак: 0 положительное, 1 отрицательное; остальные биты — величина по модулю.
- Диапазон: -(2^7 − 1) … +(2^7 − 1) и два представления нуля (+0 и −0).
- Например: +5 = 0 0000101 → 00000101; −5 = 1 0000101 → 10000101.
- Обратный код (one’s complement, OC)
- Отрицательное число кодируется как битовая инверсия представления его_abs (для положительного x это просто x; для −x — инверсия всех битов x).
- Есть два нуля: 00000000 (+0) и 11111111 (−0).
- Пример: +5 = 00000101; −5 = инверсия 00000101 → 11111010.
- При сложении необходимо учесть «end-around carry» (если есть перенос за пределы разрядности, сложить его обратно в младший разряд).
- Двух’s complemento (two’s complement, TC)
- Это современный стандарт: старший бит — знак, но отрицательное число кодируется как 2^n − |x|. Сам ноль единственный: 00000000.
- Диапазон: −2^7 … 2^7 − 1 = −128 … +127.
- Примеры (8 бит):
- +5 = 00000101
- −5 = 2^8 − 5 = 256 − 5 = 251 → 11111011
- −1 = 11111111
- −128 = 10000000
- Преимущества: сложение и вычитание работают одинаково для знаковых и беззнаковых чисел; единый механизм обработки переполнения.
Почему чаще всего используют двух’s complemento
- Простая арифметика: сложение и вычитание работают одинаково для положительных и отрицательных чисел, переполнение просто забрасывается в старший бит.
- Единственное нулевое представление.
Коротко о конвертации в двух’s complemento
- Для неотрицательного x: просто двоичное представление.
- Для отрицательного −x (0 < x < 2^n): взять двоичное представление x, инвертировать все биты и прибавить 1.
- Пример: −18 в 8 битах → 2^8 − 18 = 238 → 11101110.
Ключевые моменты
- Беззнаковые числа кодируются напрямую битами.
- Знаковые схемы SM и OC существуют исторически, но TC стал де-факто стандартом в современных процессорах.
- Объем диапазона зависит от разрядности (8, 16, 32, 64 бита и т. д.).
- Переполнение наблюдается, если результат выходит за допустимый диапазон.
Если нужно, могу привести задачи на преобразование конкретного числа в нужном формате (8/16/32-бит) или разобрать пример сложения в двух’s complemento.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



