Здравствуйте, LiIon, Вы писали:
LI>Нужно выразить основные булевые функции(and, or, xor, not) через арифметические действия.
...для однобайтовых чисел:
x[k](2) ::= k-я цифра числа x в двоичной системе счисления
x[n]...x[0]( 2) ::= x, записанное двоичными цифрами.
x[m]...x[0](10) ::= x, записанное десятичными цифрами.
sum[i=0,7](a[i](2)) ::= сумма по i от 0 до 7 двоичных a[i]-ых
2^i ::= 2 в степени i
a shl i ::= побитный сдвиг a влево на i бит без усечения битов, вышедших за разрядную сетку
a shr i ::= аналогично предыдущему (только вправо и с усечением)
a div b ::= неполное частное при делении a на b
not a = 1...1(2) — a = 255(10) — a a shl i = a * (2^i) a shr i = a div (2^i) a[i](2) = ( ( a shl (7-i) ) — ( ( a shr (i+1) ) shl 8 ) ) shr 7 a and b = sum[i=0,7]( a[i](2) * b[i](2) * (2^i) ) a or b = not( (not a) and (not b) )
not(not a) = a
a => b = (not a) or b = not( a and (not b) )
a <=> b = (a => b) and (b => a) a xor b = not(a <=> b) = not( (a=>b) and (b=>a) ) = not( not( a and (not b) ) and not( b and (not a) ) )