| 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 |
|
|
|
| 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 | | | 319-960-895 | 8.10.2008 20:07 |
|
|
|
| 0 xor 1 xor 0 že je 0? (odpovědět) | gugumaa | 195.113.79.10/10.0.10.* | 8.10.2008 21:26 |
|
|
|
| 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 |
|
|
|
| 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 | | | | 8.10.2008 22:00 |
|
|
|
| <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 |
|
|
|
| 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 |
|
|
|
| a to jak logicky xor, tak i bitovy ^ (odpovědět) | prc | 213.211.51.* | 9.10.2008 21:35 |
|
|
|
| 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 |
|
|
|
| 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 |
|
|
|
| 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 |
|
|
|
| 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 |
|
|
|
| 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 |
|
|
|
| JavaScript to spocita rovnez spravne, jen to PHP se v tomhle ohledu chova nelogicky... (odpovědět) | Emkei | | | | 9.10.2008 19:11 |
|
|
|
| jojo, sry, trochu sem to posral :D, to se omlouvam =)
----------
..:@]> [link] <[@:.. (odpovědět) | DjH | | | 319-960-895 | 9.10.2008 9:02 |
|
|
|
| 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) | |
|
|
|
| nějaký moderní dialekt lispu? :p (odpovědět) | .m | 212.96.172.* | 9.10.2008 16:55 |
|
|
|
| copak php ma ukazatele? (odpovědět) | prc | 213.211.51.* | 9.10.2008 21:28 |
|
|
|
| pr0ph3t: Na pointrech je Cecko postavene ;) (odpovědět) | __( | )__ | 90.176.138.* | 9.10.2008 14:32 |
|
|
|
| a diky pointerum pada nejvice programu :D (odpovědět) | __( | )__ | 90.176.138.* | 9.10.2008 14:33 |
|
|
|
| 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 | | | | 9.10.2008 22:35 |
|
|
|
| ($d = $a) xor $b xor $c;
(odpovědět) | prc | 213.211.51.* | 10.10.2008 0:08 |
|
|
|
| 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 | | | | 10.10.2008 7:22 |
|
|
|