Re[7]: как выразить конъюнкцию через арифметические действия
От: Chamele0n  
Дата: 10.03.05 23:45
Оценка: +1
Но ведь это нонсенс?
... << RSDN@Home 1.1.3 stable >>
Re[3]: Может так?
От: Reunion  
Дата: 11.03.05 04:37
Оценка: +1
Здравствуйте, LiIon, Вы писали:

LI>Здравствуйте, dikun, Вы писали:


D>>...для однобайтовых чисел:


D>>x[k](2) ::= k-я цифра числа x в двоичной системе счисления

D>>x[n]...x[0]( 2) ::= x, записанное двоичными цифрами.
D>>x[m]...x[0](10) ::= x, записанное десятичными цифрами.
D>>sum[i=0,7](a[i](2)) ::= сумма по i от 0 до 7 двоичных a[i]-ых
D>>2^i ::= 2 в степени i
D>>a shl i ::= побитный сдвиг a влево на i бит без усечения битов, вышедших за разрядную сетку
D>>a shr i ::= аналогично предыдущему (только вправо и с усечением)
D>>a div b ::= неполное частное при делении a на b

D>>not a = 1...1(2) — a = 255(10) — a

D>>a shl i = a * (2^i)
D>>a shr i = a div (2^i)
D>>a[i](2) = ( ( a shl (7-i) ) — ( ( a shr (i+1) ) shl 8 ) ) shr 7
D>>a and b = sum[i=0,7]( a[i](2) * b[i](2) * (2^i) )
D>>a or b = not( (not a) and (not b) )
D>>not(not a) = a
D>>a => b = (not a) or b = not( a and (not b) )
D>>a <=> b = (a => b) and (b => a)
D>>a xor b = not(a <=> b) = not( (a=>b) and (b=>a) ) = not( not( a and (not b) ) and not( b and (not a) ) )

D>>Всё.

D>>Если есть желание — преобразовывай дальше.

LI>В том то и дело что побитово я могу это все разложить и преобразовать через другие побитовые операции, но совместить побитовые операции с арифметическими действиями у меня не получается, т.е. можно ли преобразовать такую формулу (a or (not(b-c)), где '-' арифметическое действие, через арифметические действия а не через побитовые. Или как арифметический '-' выразить побитовыми функциями.


Тут мне стало интересно: а зачем
как выразить конъюнкцию через арифметические действия
От: LiIon  
Дата: 09.03.05 19:58
Оценка:
Помогите чайнику!
Нужно выразить основные булевые функции(and, or, xor, not) через арифметические действия.
Re: как выразить конъюнкцию через арифметические действия
От: Reunion  
Дата: 10.03.05 05:25
Оценка:
Здравствуйте, LiIon, Вы писали:

LI>Помогите чайнику!

LI>Нужно выразить основные булевые функции(and, or, xor, not) через арифметические действия.

Если true = 1, а false = 0 то:
a and b = min(a, b)
a or b = max(a, b)
not a = 1 — a
xor соответственно выражаешь через эти три

С другой стороны если пользоваться булевой алгеброй, то x + x = 0, x*x = x и воспользовавшись правилом разложения булевой функции в булевый многочлен получаем:
not x = x + 1
x1 xor x2 = x1 + x2
x1 or x2 = x1*x2+x1+x2
x1 and x2 = x1*x2
Re: как выразить конъюнкцию через арифметические действия
От: EastMan  
Дата: 10.03.05 06:50
Оценка:
Здравствуйте, LiIon, Вы писали:

LI>Помогите чайнику!

LI>Нужно выразить основные булевые функции(and, or, xor, not) через арифметические действия.
and='*'; or='+'; xor='-'; not='*(-1)(+/-)'
Re[2]: как выразить конъюнкцию через арифметические действия
От: Аноним  
Дата: 10.03.05 10:05
Оценка:
Здравствуйте, Reunion, Вы писали:

R>Здравствуйте, LiIon, Вы писали:


LI>>Помогите чайнику!

LI>>Нужно выразить основные булевые функции(and, or, xor, not) через арифметические действия.

R>Если true = 1, а false = 0 то:

R>a and b = min(a, b)
R>a or b = max(a, b)
R>not a = 1 — a
R>xor соответственно выражаешь через эти три

R>С другой стороны если пользоваться булевой алгеброй, то x + x = 0, x*x = x и воспользовавшись правилом разложения булевой функции в булевый многочлен получаем:

R>not x = x + 1
R>x1 xor x2 = x1 + x2
R>x1 or x2 = x1*x2+x1+x2
R>x1 and x2 = x1*x2

я извиняюсь, это подойдет если обрабатывать каждое число по битам, может я не правильно в начале выразился, мне нужен алгоритм для представления например (X and (Y or Z)), где X,Y,Z любые произвольные числа.
Re[2]: как выразить конъюнкцию через арифметические действия
От: LiIon  
Дата: 10.03.05 10:11
Оценка:
Здравствуйте, EastMan, Вы писали:

EM>Здравствуйте, LiIon, Вы писали:


LI>>Помогите чайнику!

LI>>Нужно выразить основные булевые функции(and, or, xor, not) через арифметические действия.
EM>and='*'; or='+'; xor='-'; not='*(-1)(+/-)'

я понимаю что and можно записать как '*' но при обработке получается:
1101 and 1001 = 1001
1101 * 1001 = 1110101

1101 or 1001 = 1101
1101 — 1001 = 0100

а мне нужен алгоритм который бы считал булевые функции арифметическими действиями или наоборот
Re[3]: как выразить конъюнкцию через арифметические действия
От: Chamele0n  
Дата: 10.03.05 10:12
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>я извиняюсь, это подойдет если обрабатывать каждое число по битам, может я не правильно в начале выразился, мне нужен алгоритм для представления например (X and (Y or Z)), где X,Y,Z любые произвольные числа.


Простите, а что Вы под этим подразумеваете?
Есть and,or логические, над булевым типом — тогда при чем здесь произвольные числа?
С другой стороны, есть побитовые операции над числами
А вы о каких?
... << RSDN@Home 1.1.3 stable >>
Re[4]: как выразить конъюнкцию через арифметические действия
От: LiIon  
Дата: 10.03.05 10:13
Оценка:
Здравствуйте, Chamele0n, Вы писали:

C>Здравствуйте, <Аноним>, Вы писали:


А>>я извиняюсь, это подойдет если обрабатывать каждое число по битам, может я не правильно в начале выразился, мне нужен алгоритм для представления например (X and (Y or Z)), где X,Y,Z любые произвольные числа.


C>Простите, а что Вы под этим подразумеваете?

C>Есть and,or логические, над булевым типом — тогда при чем здесь произвольные числа?
C>С другой стороны, есть побитовые операции над числами
C>А вы о каких?

я ж говорю что я чайник, мне именно и нужны побитовые операции над числами, просто хочу узнать есть ли возможность числа обрабатывать не побитово, а целиком
Re[3]: как выразить конъюнкцию через арифметические действия
От: Nose Россия  
Дата: 10.03.05 10:15
Оценка:
Здравствуйте, LiIon, Вы писали:

LI>1101 and 1001 = 1001

LI>1101 * 1001 = 1110101

LI>1101 or 1001 = 1101

LI>1101 — 1001 = 0100

LI>а мне нужен алгоритм который бы считал булевые функции арифметическими действиями или наоборот


У тебя неправильная терминология — из-за этого и путаница. Тебе нужны не булевы функции а битовые операции.
Re[4]: как выразить конъюнкцию через арифметические действия
От: LiIon  
Дата: 10.03.05 10:17
Оценка:
Здравствуйте, Nose, Вы писали:

N>Здравствуйте, LiIon, Вы писали:


LI>>1101 and 1001 = 1001

LI>>1101 * 1001 = 1110101

LI>>1101 or 1001 = 1101

LI>>1101 — 1001 = 0100

LI>>а мне нужен алгоритм который бы считал булевые функции арифметическими действиями или наоборот


N>У тебя неправильная терминология — из-за этого и путаница. Тебе нужны не булевы функции а битовые операции.


я ж и говорю, что я чайник, и в терминологии как выяснилось такойже
Re[5]: как выразить конъюнкцию через арифметические действия
От: Reunion  
Дата: 10.03.05 15:10
Оценка:
Здравствуйте, LiIon, Вы писали:

LI>Здравствуйте, Nose, Вы писали:


N>>Здравствуйте, LiIon, Вы писали:


LI>>>1101 and 1001 = 1001

LI>>>1101 * 1001 = 1110101

LI>>>1101 or 1001 = 1101

LI>>>1101 — 1001 = 0100

LI>>>а мне нужен алгоритм который бы считал булевые функции арифметическими действиями или наоборот


N>>У тебя неправильная терминология — из-за этого и путаница. Тебе нужны не булевы функции а битовые операции.


LI>я ж и говорю, что я чайник, и в терминологии как выяснилось такойже


Дык и в С/С++ и в Pascal/Delphi есть эти операции: (and, or, not, xor) в в Pascal/Delphi и (&, |, !, ^) соответственно в С/С++...
Re: Может так?
От: dikun Беларусь  
Дата: 10.03.05 20:53
Оценка:
Здравствуйте, 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) ) )

Всё.
Если есть желание — преобразовывай дальше.
Re[2]: Может так?
От: LiIon  
Дата: 10.03.05 23:04
Оценка:
Здравствуйте, dikun, Вы писали:

D>...для однобайтовых чисел:


D>x[k](2) ::= k-я цифра числа x в двоичной системе счисления

D>x[n]...x[0]( 2) ::= x, записанное двоичными цифрами.
D>x[m]...x[0](10) ::= x, записанное десятичными цифрами.
D>sum[i=0,7](a[i](2)) ::= сумма по i от 0 до 7 двоичных a[i]-ых
D>2^i ::= 2 в степени i
D>a shl i ::= побитный сдвиг a влево на i бит без усечения битов, вышедших за разрядную сетку
D>a shr i ::= аналогично предыдущему (только вправо и с усечением)
D>a div b ::= неполное частное при делении a на b

D>not a = 1...1(2) — a = 255(10) — a

D>a shl i = a * (2^i)
D>a shr i = a div (2^i)
D>a[i](2) = ( ( a shl (7-i) ) — ( ( a shr (i+1) ) shl 8 ) ) shr 7
D>a and b = sum[i=0,7]( a[i](2) * b[i](2) * (2^i) )
D>a or b = not( (not a) and (not b) )
D>not(not a) = a
D>a => b = (not a) or b = not( a and (not b) )
D>a <=> b = (a => b) and (b => a)
D>a xor b = not(a <=> b) = not( (a=>b) and (b=>a) ) = not( not( a and (not b) ) and not( b and (not a) ) )

D>Всё.

D>Если есть желание — преобразовывай дальше.

В том то и дело что побитово я могу это все разложить и преобразовать через другие побитовые операции, но совместить побитовые операции с арифметическими действиями у меня не получается, т.е. можно ли преобразовать такую формулу (a or (not(b-c)), где '-' арифметическое действие, через арифметические действия а не через побитовые. Или как арифметический '-' выразить побитовыми функциями.
Re[6]: как выразить конъюнкцию через арифметические действия
От: LiIon  
Дата: 10.03.05 23:06
Оценка:
Здравствуйте, Reunion, Вы писали:

R>Здравствуйте, LiIon, Вы писали:


LI>>Здравствуйте, Nose, Вы писали:


N>>>Здравствуйте, LiIon, Вы писали:


LI>>>>1101 and 1001 = 1001

LI>>>>1101 * 1001 = 1110101

LI>>>>1101 or 1001 = 1101

LI>>>>1101 — 1001 = 0100

LI>>>>а мне нужен алгоритм который бы считал булевые функции арифметическими действиями или наоборот


N>>>У тебя неправильная терминология — из-за этого и путаница. Тебе нужны не булевы функции а битовые операции.


LI>>я ж и говорю, что я чайник, и в терминологии как выяснилось такойже


R>Дык и в С/С++ и в Pascal/Delphi есть эти операции: (and, or, not, xor) в в Pascal/Delphi и (&, |, !, ^) соответственно в С/С++...



то что они есть в этих языках я знаю, но мне нужно избавиться в формуле от побитовых операций, т.е. выразить их через арифметические действия
Re[8]: как выразить конъюнкцию через арифметические действия
От: LiIon  
Дата: 10.03.05 23:51
Оценка:
Здравствуйте, Chamele0n, Вы писали:

C>Но ведь это нонсенс?


а может всетаки есть возможность преобразования?
Re[4]: Может так?
От: LiIon  
Дата: 11.03.05 08:47
Оценка:
Здравствуйте, Reunion, Вы писали:

LI>>В том то и дело что побитово я могу это все разложить и преобразовать через другие побитовые операции, но совместить побитовые операции с арифметическими действиями у меня не получается, т.е. можно ли преобразовать такую формулу (a or (not(b-c)), где '-' арифметическое действие, через арифметические действия а не через побитовые. Или как арифметический '-' выразить побитовыми функциями.


R>Тут мне стало интересно: а зачем


даже не знаю что ответить, я стал писать небольшую прогу, и в ней есть выражение d = (a and (b-c)), и мне стало интересно, а можно ли из этой формулы выразить любой элемент через другие. А так как в ней присутствуют и побитовые и арифметические действия то у меня с этим возникли проблемы, вот я и задал вопрос, может кто с этим сталкивался уже.
Re[3]: В чём проблема?
От: dikun Беларусь  
Дата: 11.03.05 18:35
Оценка:
Здравствуйте, LiIon, Вы писали:

LI>В том то и дело что побитово я могу это все разложить и преобразовать через другие побитовые операции, но совместить побитовые операции с арифметическими действиями у меня не получается


Стоп! Я выразил:

  1. not — через арифметическую разность.

  2. and — через разность, сумму, shl и shr.
    shl — через умножение и возведение в степень.
    shr — через div и возведение в степень.
    Значит, наш and выражается через арифметические разность, сумму, умножение, возведение в степень и div.
    Нужно лишь подставить в формулу (и — если хочется — преобразовать — может чего хорошего и получиться).
    Это элементраные каскадные математические преобразования.

  3. or — через not и and, а значит — через арифметические разность, сумму, умножение, возведение в степень и div.
    Снова просто подставь в формулу, блин!!!

  4. xor — через not и and, а значит — через арифметические разность, сумму, умножение, возведение в степень и div. Подставь в формулу опять.

В чём проблема?
Я не понимаю!

Но у меня отсутствует желание упрощать выражения после подстановок.
Если не полениться, то может там чего красивого и получиться.
Я нигде не встречал этих упрощений, поэтому, возможно, их не имеет смысла проделывать, так как они не позволят получить значительной красоты упрощаемых выражений.
Re[4]: В чём проблема?
От: LiIon  
Дата: 13.03.05 19:43
Оценка:
Здравствуйте, dikun:

Спасибо огромное! это очень упростило мне жизнь Еще раз пасиб!!!!!!!!!
Re[5]: Не понял иронии...
От: dikun Беларусь  
Дата: 14.03.05 19:08
Оценка:
Здравствуйте, LiIon, Вы писали:

LI>это очень упростило мне жизнь


Не понял иронии...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.