Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3430205
А
Аноним
25 сентября 2025 13:02 · публичный вопрос
А
Аноним

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

Ответ нейросети
25 сентября 2025 13:02

Коротко: в памяти числа хранятся как последовательности бит. Как именно это число трактуют (как положительное или отрицательное) зависит от способа кодирования. Самые распространённые способы кодирования целых чисел в современных процессорах:

  1. Беззнаковые (unsigned)
  • Диапазон: 0 … 2^n − 1 (где n — число бит).
  • Пример: в 8 битах 5 хранится как 00000101.
  1. Со знаком (самый распространённый способ в аппаратуре) — двухкомплемент (two's complement)
  • Целые в диапазоне: −2^(n−1) … 2^(n−1) − 1.
  • Как кодируется:
    • Добрый (положительный) легко: число в двоичном виде с нулевым старшим битом (MSB).
    • Отрицательное число: берём двоичное представление его абсолютного значения,Invert (инвертируем все биты) и прибавляем 1.
    • MSB служит признаком знака: 0 — положительное, 1 — отрицательное.
  • Примеры (8 бит):
    • 5 — unsigned: 00000101; 5 — в знаковом тоже 00000101.
    • −5 — взять 5: 00000101 → инвертируем: 11111010 → добавляем 1: 11111011.
    • −128 — 10000000 (range даёт именно это значение для −2^7).
    • Примеры суммирования: 120 (01111000) + 10 (00001010) = 130 (10000010), но 130 воспринимается как −126 в знаковом представлении из-за выхода за диапазон, т.е. происходит переполнение.
  • Преимущества: арифметика сложения/вычитания реализуется одинаково для целых беззнаковых и знаковых; простые схемы и единые схемы нагрузок.
  • Как определить знак при чтении: если MSB = 0 — число неотрицательное; если MSB = 1 — отрицательное.
  1. Другие исторические способы кодирования целых (реже встречаются в современных процессорах)
  • знак-модуль (sign-magnitude): старший бит — знак; остальные биты — модуль числа. Например, в 8 бит: 0 0000101 означает +5, 1 0000101 — −5. Есть отдельный нуль (+0 и −0). Практически не используется в арифметике на аппаратном уровне.
  • "один комплемент" (ones' complement): отрицательное число получается инвертированием битов положительного числа. Также бывает +0 и −0. Реже используется в современной аппаратуре.
  1. Взаимосвязь с памятью и порядком байтов (эндиянность)
  • Как число хранится в памяти — набор битов в конкретном порядке байтов (little-endian против big-endian). Это влияет на то, как байты располагаться в памяти, но само значение числа определяется кодировкой (например, двухкомплемент). В большинстве современных систем это двухкомплемент и little-endian, но есть примеры и других требований в разных архитектурах.
  • Применение: при чтении из памяти компилятор/процессор интерпретируют конкретную последовательность бит/байтов согласно архитектуре.
  1. Что это значит на экзамене
  • Укажите размер (n бит) и вид кодирования.
  • Для unsigned: все биты — значение, диапазон 0 … 2^n − 1.
  • Для двоичного complemento: диапазон −2^(n−1) … 2^(n−1) − 1; знак — старший бит; отрицательные числа получают через инверсию и прибавление единицы.
  • Приведите пример кодирования конкретного числа и объясните, как определяется знак.
  • Упомяните переполнение: в двух complement переполнение обнаруживается по правилу: для знаковых чисел — когда знаки операндов совпадают, а знак результата отличается; практическая реализация в языках часто приводит к wrap-around (повторное переполнение).

Если скажете размер (например, 8, 16, 32 или 64 бита) и нужен конкретный пример, могу привести подробное разъяснение и примеры кодирования.