[N/A]Logicke operatory AND,OR,NOT,XOR

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod inflater 29. 7. 2006 18:46

Da sa polopatisticky vysvetlit vyznam tychto kurioznych operatorov (nejaka matematicka operacia alebo co) pre 13 rocneho?
Myslim nejaku matematicku operaciu alebo co, neviem co to napr. pre "AND" znamena "a zaroven".
Vyskusal som dat na kalkulacke
"8" "AND" "5" "=":
"8 a zaroven 5 sa rovna"
asi by bol vysledok 13, lenze vysledok podla kalkulacky je 0.
:-/

Dakujem vopred za Vasu odpoved,
inflater
inflater
Junior
Uživatelský avatar

Odeslat příspěvekod EAN-CODE 29. 7. 2006 19:19

Tohle funguje jenom s binarni matematikou
0 AND 0 = 0 | 0 OR 0 = 0 | 0 XOR 0 = 0 | 0 NOT 0 = 0
0 AND 1 = 0 | 0 OR 1 = 1 | 0 XOR 1 = 1 | 0 NOT 1 = 1
1 AND 0 = 0 | 1 OR 0 = 1 | 1 XOR 0 = 1 | 1 NOT 0 = 0
1 AND 1 = 1 | 1 OR 1 = 1 | 1 XOR 1 = 0 | 1 NOT 1 = 1

Jestli si to jeste dobre pamatuju
[root@server ~]# [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /
EAN-CODE
Junior
Uživatelský avatar

Odeslat příspěvekod EAN-CODE 29. 7. 2006 19:29

Jinak ty prvni dve se pouzivaji v programovani.
AND (Kdyz jsou splneny obe podminky pokracuj na...)
OR (Kdyz je splnena alespon jedna podminka pokracuj na...)
[root@server ~]# [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /
EAN-CODE
Junior
Uživatelský avatar

Odeslat příspěvekod neonn 29. 7. 2006 19:30

Nevim, jestli to dobre vysvetlim, brali jsme to v Cislicove technice (elektro)...
Porovnavas vzdycky 2 operandy (proste 2 cisla -> 2*2). V tomto jsou vsechny operatory stejne, krome NOT. Dale si musis prestavit, ze 8 neni 8, ale 1 :). Zni to blbe, ale je to tak. Proste vsechna kladna a zaporna cisla (-50, -1, 1, 99) znamenaji 1. Nula je nula... je to Boolevova algebra (nebo tak nejak) -> dvojkova soustava. Pracujes pouze s 2 hodnotama -> 1 (pravda) a 0 (nepravda)

Opakovani:
0 = 0
vse ostatni = 1


A ted k jednotlivym operatorum.
AND:
Predstav si to jako nasobeni. Kdyz mas teda 2 operandy, vynasobis je a mas vysledek. ALE PORAD PRACUJE POUZE S CISLY 0 a 1. Takze vsechny moznosti...
0 * 0 = 0
1 * 0 = 0
0 * 1 = 0
1 * 1 = 1
Kdykoliv nasobis nulou, dostanes nulu.

OR:
Tak tohle je zase scitani. Abys dostal 1, musi byt aspon jeden operand 1. Zase vsechny moznosti...
0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 = 1
Takze ti staci jedna 1 a vysledkem je "pravda" (1)...

XOR:
Je to to same jako OR (X znamena "exclusive"). Ale aby si dostal 1 (pravda), musi byt pouze jeden z operandu 1. Pokud jsou oba 1, pak se vysledek rovna 0... zase vsechny moznosti.
0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 = 0

NOT:
NOT (jak to napovida nazev - anglicky) znamena negaci. MA POUZE JEDEN OPERAND!!! Takze kdyz chces negovat 1, dostanes 0 a naopak... vsechny moznosti (jsou pouze 2)
NOT(0) = 1
NOT(1) = 0


Tak tohle by mela byt vsechna teorie. Jenom musis porad pouzivat dvojkovou soustavu. V programovani to ma tady dost pouziti (podminky apod)...
Before talking crap about someone, check the room... :)
SH*T HAPPENS! :)
neonn
Junior
Uživatelský avatar

Odeslat příspěvekod Sparrow 29. 7. 2006 19:40

No tak to zkusm :lol:

Hlavní je si uvědomit že se to odehrává v binární (dvojkové) soustavě.

takže 8 = 00001000
a 5 = 00000101
---------------------------------------
takže 8 AND 5 = 00000000

protože podmínka pro AND je že oba bity muzejí mít logickou 1 což jak vidíš ani jeden nezplňuje.

0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1


U OR je podmínka aby alespoň jeden z bitů byl logická 1. To znamená že výsledek 8 OR 5 by byl 00001101 a to je 13.

0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1

Operátor NOT je negátor a používé se jen s jedním číslem kterému změní 0 na 1 a 1 na 0. Čili NOT 8 je 11110111 a to je 247. :P

NOT 0 = 1
NOT 1 = 0

No a u XOR platí že dva porovnávaný bity nesmějí být stejný jenak je výsleden 0 pokud je alespoň jeden znich 1 je výsledek taky 1
A zase příklad 8 XOR 5 je 00001101 a to je taky 13.

0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 xOR 1 = 0


No tak a to je asi vše :lol:

Pamatuju si když jsem cca kolem 15let učil psát na Sinclairu v Assembleru tak jsem si s tím hoooodně užil :lol: :lol:

Kdyžtak napiš co by jsi nepochopil, budu se snažit to doplnit.
Motorola TX770 > Dancal > Philips Fizz > N2110 > E688 > N6150 > N6210 > N6310i > SE610 1 tyden (diky bohu) > N6610 > N6230 > N6230i > N6234 > N5800 > N C7 > Kingzone K1 > Yotaphone2
Sparrow
Junior

Odeslat příspěvekod Wikan 29. 7. 2006 19:40

Jen bych doplnil ze XORu se take nekdy rika nonekvivalence - tedy nerovnost, nestejnost. Proto je vysledek 0 kdyz jsou hodnoty stejne a 1 kdyz jsou rozdilne.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Sparrow 29. 7. 2006 19:41

tak koukám že než jsem to sesmolil tak byl někdo rychlejší :( :-/ :D :D :D
Motorola TX770 > Dancal > Philips Fizz > N2110 > E688 > N6150 > N6210 > N6310i > SE610 1 tyden (diky bohu) > N6610 > N6230 > N6230i > N6234 > N5800 > N C7 > Kingzone K1 > Yotaphone2
Sparrow
Junior

Odeslat příspěvekod Nargon 29. 7. 2006 19:47

No jsou to BINARNI operace.
Ted jen uvedu tabulku jak se to pocita. A,B vstupy, AND vysledek operace AND :)
A | B | AND
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1
Podobne je to u ostatnich, jen ten vysledek je ruzny. OR
A | B | OR
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 1
NOT je negace, ma jen jeden vstup:
A | NOT
0 | 1
1 | 0
XOR:
A | B | XOR
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
No a co ze vlastne byl ten tvuj vysledek??
Binarni operace existuji jen ve dvojkove soustave (cisla 0 a 1) takze ty tvoje cisla 8 a 5 nejsou takova cisla, jako je vidis.
8 je 1000 (binarne) a 5 je 0101 (binarne) a ted tu operaci AND
1000
0101
------
0000 (v zadnem sloupecku neni 11 takze vysledek je v kazdem sloupci 0, proto je to podle kalkulacky 0. Ten prevod z 8micky na binarni cislo muzes klidne provadet ve win kalkulacce (vedecke) zadej cislo a pak ji prepni z DEC na BIN (u te 5ky to bude 101 bez te 0 na zacatku, ale nul si zleva k cislu muzes dat kolik chces a stale to bude stejne cislo).

No jeste bych mohl napsat k cemu to vlastne je dobre. Na usporu mista :) predstav si treba nejakou hru, ktera ma 8 mistnosti. A ta hra si pamatuje ve ktery mistnosti jsi byl a kde jeste ne. K tomu zapamatovani jedne mistnosti ji staci 1 bit, ale tohle v pocitacich neni mozne samostatne ulozit. Tak si ta hra vezme celej 1 Bajt (8 bitu) aby si ulozila informaci. Kdyz to vynasobime poctem mistnosti, tak hra bere 8B. Kdyz pouzijes operatory AND a OR tak muzes tu informaci o navstiveni mistnosti ulozit do 1B dat misto tech 8mi. Asi si rikas co to je 1B nebo 8B, ale uprav B na MB a pridej par nul, a hned je tu rozdil, jestli hra bude zrat v pameti 100MB nebo 800MB :) Samozrejme, ze v praxi to takhle nebude, stejne to bude zrat hodne, nejvice pameti zere treba nahrana mapa, a tam se takhle "sporit" moc neda. A taky proc by to tak programatori delaly? at si uzivatel koupi vice pameti.
Nargon
Moderátor

Odeslat příspěvekod inflater 29. 7. 2006 20:00

Wow, kolko odpovedi... :D
Diky moc!

p.s. vedeli by ste vyriesit, prosim, toto?
http://forum.zive.sk/viewtopic.php?t=34360
je to tam ako posledne... diky moc aj za toto!!!

inflater
inflater
Junior
Uživatelský avatar

Odeslat příspěvekod Chupacabras 7. 8. 2006 20:01

Nargon píše:No jsou to BINARNI operace.


S ostatným sa dá súhlasiť, ale s týmto nie.
Existujú jednak binárne/numerické ale i logické operátory.
tj. AND, OR, a spol. sa dajú použiť jednak pri binárnych operáciách a jednak aj pri booleanovskej logike.

napr.
1 AND 1 = 1
true AND true = true

(čiže nejde výhradne o binárne operátory, aj keď sa tu v diskusii uvádzali iba v súvislosti s binárnymi operáciami)

Inak máš samozrejme pravdu a dúfam, že som inflatera moc nepomotal :)
Chupacabras
Pokročilý
Uživatelský avatar

Odeslat příspěvekod .ParadoX. 7. 8. 2006 21:31

Sparrow píše:Pamatuju si když jsem cca kolem 15let učil psát na Sinclairu v Assembleru tak jsem si s tím hoooodně užil :lol: :lol:l/quote]

taky tak :P :)
<? echo "hello world"; ?>
.ParadoX.
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod Pepeq86 7. 8. 2006 21:46

Jde o matematickou výrokovou logiku. Existuje zde tzv. pravdivostní hodnota, kde 1 reprezentuje pravdu a 0 nepravdu. Je to binarni (dvojkova) soustava. Dvojkova proto, ze zde existuji pouze dve hodnoty a to 0 a 1. Takze 0 je minimalni hodnota ktera v teto soustave existuje a 1 je maximalni.

pr. pravdivostni hodnota vyroku "1 + 1 = 2" je 1
pravdivostni hodnota vyroku "1 + 1 = 5" je 0

NOT ... negace... pravdu zmeni na nepravdu (1 na 0)
... nebo nepravdu zmeni na pravdu (0 na 1)
proste vzdycky otoci jednu z techto dvou promennych na opacnou

AND ... logický součin ... 1 x cokoliv je cokoliv
... 0 x cokoliv je 0
je v tom myslim videt priklad z matematiky ( 0 = nic a nic krát cokoliv je nic)

OR ... logický součet ... 1 + cokoliv je 1
... 0 + cokoliv je cokoliv
matematika ()

no a napr. v programovani to potom vyuzivas pri definovani podminek, napr. bude-li podminka, ze nactena hodnota musi byt ruzna nule, tak bude-li hodnota nule opravdu ruzna, bude jeji pravdivostni hodnota 1 (nekdy take pravda nebo true) a v tom pripade se bude za podminkou delat vetev, ktera je urcena pro pravdivost vyroku.
V opacnem pripade bude pravdivostni hodnota 1 (nepravda nebo false) a potom se za podminkou bude delat vetev, ktera je urcena pro nepravdivost vyroku "hodnota je ruzna 0", takze treba se vypise chybova hlaska.
Pepeq86
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků