AidarM>>в частности полиномы жигалкина.AidarM>Что это?
афаик: полиномы жигалкина - выражения с операторами • и + на алфавите аргументов { 0, 1 }
• - умножение, aka AND
+ - сложение по модулю 2, aka XOR
множество операторов { AND, XOR } тоже полное, кстати.
например
A•B + A + B
(в обычной нотации ( A AND B ) XOR A XOR B )
этот полином на выхлопе имеет A OR B
AidarM>Пусть у вас есть 2 логические машины. Одна бинарная, другая(уж как вы ее элементы построили и какой смысл они имеют - вам и Богу известно) - тернарная. Дык вот, задавая им по смыслу одно и то же задание, вы должны получать по смыслу один и тот же ответ.
ну и?
вот мы задаём трём машинам M2, M3A, M3B задание исчислить выражения
false xor false, false neqv false, 0+0
false xor true, false neqv true, 0+1
true xor false, true neqv false, 1+0
true xor true, true neqv true, 1+1
и получаем удовлетворяющий вас результат.
а дальше M3A может выстрелить:
undef neqv undef = false
undef neqv false = true
undef neqv true = true
и M3B, скажем:
undef xor undef = undef
undef xor false = undef
undef xor true = undef
кто более матери истории дорог?
AidarM>Мыслить проще
чёт пока не видно, что проще...
Anika>[-]+[-]=[+]...И это вроде как просто и понятно.
вот по поводу [-]+[-]=[+] - я не привык.
мне просто и понятно [-]+[-]=[-] по аналогии [-8]+[-15]=[-23].
Anika>Так у троичной арифметики такой корявости быть не может.
у двоичной тоже можно избежать. определяем унарный оператор [-] (а на практике наших в вычислительных машинах так и есть - выделен знаковый разряд, который хранит "1" для отрицательных чисел), получаем
-3=-11
-2=-10
-1=-1
0=0
1=1
2=10
3=11
всё правильно, просто и логично. comme il faut, говорят французы.
если вы имеете в виду нотацию,
-3=101
-2=110
-1=111
0=000
1=001
2=010
3=011
то я напомню, что она появилась именно из за сокращения базиса арифметических операторов до { neg A, A+B }. в таком случае "- A" записывается как negA + 1 и ведущие нули заменяются ведущими единицами вплоть до знакового разряда регистра.
и я даже напомню, что это сделано для облегчения вычитания A-B, которое в таком битовом представлении выглядит как A + negB
вместо сложных условных вычислений a-la "отнять модуля от большего по модулю числа модуль меньшего по модулю и подставить к результату знак большего по модулю числа".
15-23 = sign(-23)•(|23|-|15|). жуть.
в общем случае в терминах C:
A - B = abs(A)>abs(B) ? sign(A) * (abs(A) - abs(B)) : sign(B) * (abs(B) - abs(A))
или
A - B = A + ~B
с прибавлением к отрицательному числу положительного примерно такая же героическая байда начнётся при нормальной нотации.
короче, Anika, вы тут не правы. вы критикуете искажённую двоичную нотацию, нотацию благодаря этому удобную для других целей. в вашем случае по хорошему программировать надо было переменную в диапазоне [ -7F (16) , 7F (16) ] вместо борьбы с исключениями.
(появление инструментов обработки исключений, вообще говоря, признак плохого алгоритмического программирования, и может являться признаком хорошего системного программирования ТОЛЬКО если алгоритмически удержать управление в программе никак не возможно).
P.S.троичные логики может быть могут называться ещё трёхзначными. это я думаю потому, что есть выражение "K-значная логика". ну ламер я, ламер.
P.P.S.оператор от одного операнда, вспомнил, называется унарным.