XOR

HackForum

XOR#
Dobrý večer.

Začínám s programováním a tak jsem si říkal, že by bylo dobré umět logické fce. AND, OR a jejich negované protějšky (případně ještě negace, NXOR)mi problém nedělají, ba bych dokonce řekl, že je to hračka. Trochu si ale nevím rady s funkcí XOR. Když se podíváme na pravdivostní tabulku pro dvě proměnné, tak nabývá hodnotu true, když první proměnná je různá od té druhé:
0 1 1
1 0 1

Teď vysvětlím můj problém (pro ostatní určitě hračka): co když chci udělat XOR pro 3 proměnné (a více)? V takovém případě přeci vždy alespoň 2 výrazy vrátí true, takže tam už neplatí ten, že každá proměnná vrátí jinou hodnotu:

0 1 0
0 1 1
1 0 0
%
(odpovědět)
marbet | 85.195.119.*8.10.2008 18:58
re: XOR#
plati to jako u scitani, provadi se to z leva do prava... tedy treba
0 xor 1 xor 0 = (0 xor 1) xor 0, tedy 0

----------
..:@]> [link] <[@:..
(odpovědět)
DjH | E-mail | Website | ICQ 319-960-8958.10.2008 20:07
re: XOR#
0 xor 1 xor 0 že je 0?
(odpovědět)
gugumaa | 195.113.79.10/10.0.10.*8.10.2008 21:26
re: XOR#
aha tak takhle. myslím, že už mi to je jasné. pak v tom tvém příkladě máš chybu, ptž 0 xor 1 vrátí 1 a 1 xor 0 vrítí také 1.

Díky za vysvětlení.
(odpovědět)
marbet | 88.103.71.*8.10.2008 21:32
re: XOR#
zvlastni je, ze kdyz si napisu program pro vypocet 3 "xorovanych" hodnot v C++, pak vse funguje korektne, stejne tomu je i v Pascalu, ale v PHP je vysledek spatny, a sice 0 0 1 namisto ocekavanych 1 0 1. napada nekoho proc? (odpoved "PHP je na pi*u" neberu jako argument =)
(odpovědět)
Emkei | E-mail | Website | PGP8.10.2008 22:00
re: XOR#
<pre>
php -r 'printf("%d %d %d %d", 0 xor 0, 0 xor 1, 1 xor 0, 1 xor 1);'
0 1 1 0
<pre>
Mne to funguje.

(odpovědět)
prc | 213.211.51.*9.10.2008 21:17
re: XOR#
a samozrejme i pro 3 hodnoty:
0 xor 0 xor 0 = 0
0 xor 0 xor 1 = 1
0 xor 1 xor 0 = 1
0 xor 1 xor 1 = 0
1 xor 0 xor 0 = 1
1 xor 0 xor 1 = 0
1 xor 1 xor 0 = 0
1 xor 1 xor 1 = 1

(odpovědět)
prc | 213.211.51.*9.10.2008 21:24
re: XOR#
a to jak logicky xor, tak i bitovy ^
(odpovědět)
prc | 213.211.51.*9.10.2008 21:35
re: XOR#
DJH:
gratulujem ze si mu to perfektne predviedol az na jednu malu chybu.

0 xor 1 = 0
0 xor 0 = 1
pretoze plati:
#define xor ^
1^1 = 1;
1^0 = 0;
0^1 = 0;
0^0 = 1;
naco sem pleties scitanie preboha,tu sa jedna o logicke operacie na najnizsej urovni.


(odpovědět)
lame | 78.99.133.*8.10.2008 22:42
re: XOR#
sčítání zmínil proto, protože je stejně jako exkluzivní disjunkce asociativní, nevím, proč by to sem nemohl plést :P
(odpovědět)
.m | 212.96.172.*9.10.2008 16:10
re: XOR#
1^1 = 0;
1^0 = 1;
0^1 = 1;
0^0 = 0;

Kdyz netusis co je to za operaci a jak funguje, tak drz kusnu ;)

(odpovědět)
prc | 213.211.51.*9.10.2008 21:13
re: XOR#
trochu ses seknul s tím výsledkem. tebou uvedený příklad je pravdivý v případě, že výsledek xoru zneguju, což už ovšem neuvádíš.
(odpovědět)
marbet | 88.103.71.*9.10.2008 21:30
re: XOR#
Emkei: Chyba bude v PHP :) Chtelo by to prostudovat zdrojaky.

Zkusil bych xorovat i v jinych interpretovanych jazycich
(odpovědět)
__( | )__ | 193.200.150.*8.10.2008 23:20
re: XOR#
JavaScript to spocita rovnez spravne, jen to PHP se v tomhle ohledu chova nelogicky...
(odpovědět)
Emkei | E-mail | Website | PGP9.10.2008 19:11
re: XOR#
jojo, sry, trochu sem to posral :D, to se omlouvam =)

----------
..:@]> [link] <[@:..
(odpovědět)
DjH | E-mail | Website | ICQ 319-960-8959.10.2008 9:02
re: XOR#
Emkei: to je urcite tim, ze pouzivas stare a odporne PHP. Kdybys pouzival jediny spravny, moderni, lehko naucitelny jazyk, ktery nepouziva zbytecnosti jako ukazatele, tak by to urcite fungovalo :-)

----------
public static void main(String args[]){
 throw new UnsupportedOperationException("Not implemented!");
}


(odpovědět)
pr0ph3t9.10.2008 12:12
re: XOR#
takze za to muzu ja? =)
(odpovědět)
Emkei | E-mail | Website | PGP9.10.2008 12:49
re: XOR#
nějaký moderní dialekt lispu? :p
(odpovědět)
.m | 212.96.172.*9.10.2008 16:55
re: XOR#
copak php ma ukazatele?
(odpovědět)
prc | 213.211.51.*9.10.2008 21:28
re: XOR#
pr0ph3t: Na pointrech je Cecko postavene ;)
(odpovědět)
__( | )__ | 90.176.138.*9.10.2008 14:32
re: XOR#
a diky pointerum pada nejvice programu :D
(odpovědět)
__( | )__ | 90.176.138.*9.10.2008 14:33
re: XOR#
tak jsem na to konecne prisel. schvalne, kdo tu "chybu" najde:

<?php
$a = 0;
$b = 1;
$c = 0;

$d = $a xor $b xor $c;

echo $d;

// spravny vysledek ma byt 1, presto je v $d ulozena 0
?>
(odpovědět)
Emkei | E-mail | Website | PGP9.10.2008 22:35
re: XOR#
($d = $a) xor $b xor $c;

(odpovědět)
prc | 213.211.51.*10.10.2008 0:08
re: XOR#
celkem jsou minimalne 3 zpusoby, jak ten kod uvest v chod, a sice:
a) $d = $a ^ $b ^ $c;
b) $d = ($a xor $b xor $c);
c) echo $a xor $b xor $c; // pripadne printf() atp.

(odpovědět)
Emkei | E-mail | Website | PGP10.10.2008 7:22

Zpět
 
 
 

 
BBCode