Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Промышленные технологии

Отрицательные числа в двоичной системе: знаковый модуль, дополнение и дважды дополнительный код

Вычитание можно превратить в сложение, рассматривая вычитаемое как отрицательное: 7 − 5 становится 7 + (−5).

Освоив представление положительных чисел, следующим шагом кодируем отрицательные, чтобы вычитание выполнялось той же процедурой сложения.

В десятичной системе знак минус ставится перед старшим разрядом (например, −5). В двоичном железе только два состояния — высокий или низкий — поэтому знак нужно закодировать в самой битовой последовательности.

У нас нет третьего символа «минус». Одно решение — выделить бит для математического знака:

Отрицательные числа в двоичной системе: знаковый модуль, дополнение и дважды дополнительный код

Использование бит не по их позиционному весу может вводить в заблуждение: 1101₂ можно прочесть как тринадцать, если не считать старший бит знаковым.

Сначала определим общую разрядность для размещения максимального модуля, затем обеспечим, чтобы все операции оставались в этой ширине.

В примере ниже диапазон ограничен −7 (1111₂) … +7 (0111₂), рассматривая старший бит как знаковый, предотвращая ложную интерпретацию.

Кодирование −5 как 1101₂ иллюстрирует систему знаковый-модуль, где старший бит обозначает знак, а не значение, жертвуя позиционной чистотой ради практичности.

Старший бит показывает знак; остальные биты сохраняют стандартные позиционные веса (степени двойки).

Дополнение

Хотя знаковый-модуль понятен концептуально, он усложняет двоичное сложение. Как прибавить −5 (1101₂) к другому числу обычным сложением?

Создание специального алгоритма сложения упускает суть — это равносильно столбиковому вычитанию, теряя вычислительную выгоду.

Альтернатива — дополнение — позволяет складывать отрицательные числа стандартным двоичным сложением и естественно согласуется с позиционными весами.

В этой схеме старший бит всё ещё ограничивает диапазон, но теперь имеет отрицательный вес (например, −8). Например, −5 кодируется так:

Отрицательные числа в двоичной системе: знаковый модуль, дополнение и дважды дополнительный код

С тремя правыми битами для модулей 0–7 и левым битом 0 или −8 можно представить любое целое от −7 (1001₂ = −8 + 1 = −7) до +7 (0111₂ = 0 + 7 = 7).

Положительные значения неизменны, но отрицательные требуют операции дополнения.

Отрицательные числа в двоичной системе: знаковый модуль, дополнение и дважды дополнительный код

Отрицательные числа в правом столбце — сумма трёх правых бит и отрицательного веса левого (−8), поэтому их прогрессия не совпадает с положительной.

Три правых бита должны быть установлены так, чтобы в сумме с −8 дать нужное отрицательное значение.

Дважды дополнительный код (Two's Complement)

Три правых бита — это дважды дополнительный код положительного аналога. Например:

Отрицательные числа в двоичной системе: знаковый модуль, дополнение и дважды дополнительный код

С битом отрицательного веса как четвёртым (−8), дважды дополнительный код для любого положительного числа — это значение, которое нужно прибавить к −8, чтобы получить отрицательный эквивалент.

Вычисление двухкратного дополнения просто: инвертировать все биты (однократное дополнение) и прибавить единицу. Для пяти (101₂) инвертируем в 010₂, прибавляем 1 → 011₂, что есть −5 в трёхбитном двухкратном дополнении.

Генерация работает так же, если манипулировать всеми битами, включая знаковый. Пример: 0101₂ (пять) в отрицательную пятую:

Инвертировать все → 1010₂; прибавить 1 → 1011₂, что есть −5 в четырёхбитном двухкратном дополнении.

Критично зафиксировать позицию бита отрицательного веса до преобразования. Если восьмой бит — знаковый (10000000₂), двухкратное дополнение 0000101₂ будет 1111011₂, представляя −5 в восьмибитном формате.

Таким образом, в 8-битной системе +5 = 00000101₂, а −5 = 11111011₂.

СВЯЗАННЫЕ РАБОЧИЕ ЛИСТЫ:

Промышленные технологии

  1. 3-битный двоичный счетчик на таймере 555 и триггерах 4027
  2. Восьмеричная и шестнадцатеричная системы: практическое руководство для инженеров
  3. Числа и системы счисления: понимание различия и его практическое значение
  4. Двоичное вычитание с использованием двухкратного дополнения
  5. Понимание отрицательной обратной связи в ОУ: повторители напряжения и стабильность
  6. Освоение алгоритмов Java Collections: сортировка, перемешивание и многое другое
  7. Работа с числовыми типами в C++: практическое руководство
  8. Числа в MATLAB: типы, хранение и преобразование
  9. Числа в Python: Неизменяемые числовые типы данных
  10. Создание первого Go-приложения на PLCnext: руководство для начинающих