Автор: Тарасов "Побитная инверсия слова равносильна дополнению его значения как числа без знака до 2^n-1. Это следует в свою очередь из того, что сумма весов всех битов слова – числа без знака – равна 2^n-1. Прибавление единицы к результату инвертирования дает дополнение до 2n, которое как было разъяснено выше, является представлением в дополнительном коде числа, равного исходному по абсолютной величине, но противоположному по знаку."
простой вопрос: почему такие отношения вообще есть?
А+iБ+1 и i(iА+Б) и тот и другой алгоритм вычитания на сумматорах одно из другого не выводиться в булевой алгебре.
не соблаговолите объяснить причину?
мое объяснение простое.
первую формулу придумали случайно, вторую вывел я.
|
|
Почему же отношения есть (хотя вам уже объясняли):
Есть такой раздел математики "модулярная арифметика"
Описывает, например, в том числе, расчет времени по стрелочным часам (модуль 12) и суткам (модуль 24). Вы, надеюсь, часами пользоваться
умеете?
В модулярной арифметике есть понятие "дополнение".
Например "если самолет приземлился в 02:00, летел 7 часов, во сколько он взлетел? Решение 2-7=-5 нас явно не удовлетворит.

Модуль у нас 24, дополнение равно 24-7=17. Результат 17+2=19. Действительно, вылетевший в 19:00 самолет, если он летел 7 часов, приземлится в 02:00.
Для простоты рассмотрим четырехбитовое слово
Если мы рассмотрим четырехбитовое слово, то его максимальное значение в двоичной системе 1111 (в десятичной 15).
В данном случае сложение и вычитание для
положительных чисел описываются в модулярной арифметике по модулю 15.
Например, 2-7 по модулю 15 можно посчитать так:
2-7=2+(15-7)=0010+(1111-0111)=0010+1000=1010(10).
При этом дополнение 7 до 15 равно (1111-0111).
Поймите, то, что дополнение до 15 в двоичной системе равно побитовой
инверсии является всего лишь
свойством двоичной системы счисления. Это просто так совпало, что дополнение числа 0111 до 1111 равно !0111. Это частный случай для конкретной системы счисления и для записи положительных чисел.
Но когда создавали принцип записи отрицательных числе в двоичной системе, решили, что удобно, если 0 будет единственный, 0+1=1 и 0-1=-1. Это искусственное решение, для удобства. Результатом этого решения стало то, что фактически операции сложения и вычитания стали описываться модулярной арифметикой по модулю 16. Т.е. дополнение Aдоп=16-A.
Но! Число 16 в четырехбитовом слове записать нельзя!!! Поэтому его записывают как 15+1. Поэтому и дополнение A становится равным Aдоп=15+1-A. А учитывая, что !А=Адоп до 15, можно записать Адоп=!А+1. Вот она, единица.
По поводу того, что i(iА+Б) не выводится из А+iБ+1 в булевой алгебре. Если применить модулярную арифметику, и ставить своей целью избавиться от лишнего прибавления 1, то выодится элементарно.
Учитывая то, что в модулярной арифметике по модулю 16
мы можем легко прибавлять любое количество раз 15+1 к любому выражению и учитывая, что 15-А=!А
А-Б=А+15-Б+1=!(!А+Б)
Почему же эта формула редко применяется? Ну потому что применяя ее, вы ограничиваете значения агруметнов только положительными числами. Как только вы ее распространите на все аргументы, она превратится в нечто известное.
Если же нужна оптимизация, и мы ради нее можем пойти на ограничение диапазона аргументов, то можно дофига разных формул навыводить.
Например, если мы сделаем датчик, который выдает только нечетные числа Б, то выражение А-Б вообще вычисляется одной операцией сложения и одной операцией инверсии.