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

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

3 голосов
/ 05 января 2011

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

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

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

Я что-то упустил?

Мои вопросы:

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

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

Ответы [ 2 ]

4 голосов
/ 05 января 2011

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

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

0 голосов
/ 29 декабря 2016

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

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

...