1 и 2 системы дополнения

Я пытаюсь понять различия между этими двумя системами и их влияние на программирование на Си.

Из того, что я узнал из Википедии:

  1. обе системы используются для представления отрицательных чисел
  2. свое дополнение применяется побитовое НЕ к отрицательному числу (система имеет +0 и -0)
  3. дополняет два, как в шаге 2 и добавляет 1 (исключает +/-0)

Я что-то упускаю?

Мои вопросы:

  1. какие архитектуры поддерживают какую систему? Что является наиболее распространенным в наши дни (1 или 2 дополнения)?
  2. в каком смысле мы должны учитывать эти системы при программировании на С? Это имеет смысл в основном только во встроенном мире?

Заранее спасибо!

2 ответа

В настоящее время большинство систем используют дополнение к двум, поскольку оно позволяет компьютеру выполнять одну и ту же точную операцию для сложения / вычитания, не заботясь о конкретном знаке числа.

Когда вы программируете, арифметика работает независимо от используемой системы - диапазон типов данных определяется языком, поэтому, если он говорит, что тип будет работать в диапазоне от -2^31 до +2^31 - 1 тогда это будет работать независимо от обозначений. Вы должны быть осторожны при работе с отдельными битами или сдвигами битов - они не будут вести себя как арифметика с степенью двойки в системах дополнения, отличных от двух (хотя вы вряд ли столкнетесь с такими системами, и, вероятно, никогда не будет, если вы просто работаете с ПК).

Единственное преимущество нотации "дополнение-дополнение" для целых чисел состоит в том, что она позволяет выполнять преобразование в форму знака и из нее без цепочки переноса. Построение компьютера с набором мигающих огней, которые показывают значение каждого регистра в форме величины знака, будет намного удобнее, если регистры используют форму своего дополнения, чем если они используют форму двойного дополнения. Если кто-то хотел использовать отдельные защелки памяти для мигающих ламп и регистров ЦП, самый простой способ приспособиться к вещам - это иметь одну схему, которая переводит два дополнения в форму дополнения или величины знака, а затем каждый регистр записывать одновременно сохраните значение двойного дополнения в регистре, обновляя защелки мигающего света значением знака-величины. Схема с фиксацией является достаточно дорогой, однако, если регистры все равно строятся из дискретных защелок, добавление некоторой схемы в ALU, чтобы она использовала свое дополнение, а затем подача индикаторов из "реальных" регистров ЦП, может быть дешевле, чем включая дополнительный набор защелок для фонарей.

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

Другие вопросы по тегам