Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
20.02.2003, 15:26
Retro



Moin, gibt es in C eigentlich kein XOR welches ein boolsches Ergenis zurückgibt? So wie "==", "&&" und "||" eben.

Zur Zeit mache ichs auf den langen Weg:

Quellcode:if (((A && B) && !C) || (!(A && B) && C))
{
    // (a und b) xor c
}
"^" arbeitet ja Bitweise...

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */


Dieser Beitrag wurde am 20.02.2003 um 15:26 von Retro bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
20.02.2003, 15:45
Tron



nein, aber falls du strikt mit false == 0 und true == 1 arbeitest kannst du ^ oder != verwenden.

im falle, dass du mit der definition false == 0 und alles andere ist true arbeitest, dann funktioniert gemaes deinem beispiel folgendes:
(a && b) ^ (c != 0)

<edit>
oder du nimmst einen c++ (afaik gibt es in c99 auch bool) compiler und verwendest ganz einfach bool (:
</edit>

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett


Dieser Beitrag wurde am 20.02.2003 um 15:46 von Tron bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
20.02.2003, 16:39
Kriz



In der Boole'schen Algebra gibt es kein XOR. XOR ist ein Produkt der Binärarithmetik. Man sollte nicht allzuleicht Boole'sche Algebra und Binärarithmetik durcheinanderwürfeln, auch wenn die Operationen ähnlich sind. Das hat ja schließlich seinen Grund, wieso es | und || sowie & und && gibt in C/C++/Java usw.

Und da kann Java mal wieder als Beispiel herhalten:

// C/C++

if(1+2) do();

Gültig, da Ergebnis 3 -> 3 != 0 -> true

// Java

if(1+2) do();

Ungültig, da Ergebnis 3 -> 3 ist Integerdatentyp -> inkompatibel zu 'boolean'

In Java wird echt strikt zwischen Boole'schen Werten und Binärwerten unterschieden (auch wenn alles im Endeffekt auf Binärwerten basiert).

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
003
20.02.2003, 17:16
Tron



natuerlich gibt es ein boolsches xor (manche nennen es antivalenz)
und genau das will der retro. mit etwas getrickse kann man das in c realisieren (siehe mein anderer post)
es ist definiert durch: a xor b = ((nicht a) und b) oder (a und (nicht b))
oder als wahrheitstabelle:
Quellcode:a b|y
---+-
0 0|0
0 1|1
1 0|1
1 1|0
(wobei 0/1 entsprechend als falsch/wahr zu interpretieren sind)
oder als die 7te 2stellige boolsche operation

zudem ist dein c/c++ hass hier voellig fehl am platze und ausserdem ist das if in c++ nicht so wie du es darstellst, denn in c++ akzeptiert es auch nur den datentyp bool, aber es existiert eine impliziete typumwandlung zwischen int/short/char/... und bool

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett


Dieser Beitrag wurde am 20.02.2003 um 17:17 von Tron bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
20.02.2003, 17:37
Retro



Danke erstmal, in meinem Fall ist alles true was ungleich Null ist. Quellcode:(A && B) ^ (C != 0)
Ist ja auch logisch, der erste sowie der zweite Term ergeben ein vom Compiler als true oder false definiertes Ergebnis dessen XOR-Verknüpfung ebenso eindeutig ist...

Zu C/C++ vs. Java: Ich finde es eigentlich besser dass eine Zahl ungleich Null (also auch etwas nicht-booleanes) als wahr gewertet wird, wie Tron nochmal gesagt hat, im Prinzip ist es ja nur eine Typenumwandlung.

Kriz hat in dem Fall natürlich auch recht, Boolean ist ja nicht gleich Binär, obwohl es relativ nah beieinander liegt.

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
005
20.02.2003, 18:01
Tron



kriz hat nur rumgememmt, dass ich den bitweisen operator ^ fuer boolsche operationen misbrauche.

und wenn ich ganz fies waere wuerde ich sagen: forensuche! das hatten wir schonmal mit dem xor und da ham kriz und ich uns auch gezankt
aber ich bin ja net fies (:<

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
006
20.02.2003, 18:13
Retro



Zitat:
Tron postete
kriz hat nur rumgememmt, dass ich den bitweisen operator ^ fuer boolsche operationen misbrauche.
joa, so evil schaut das doch nicht aus... bei gelegenheit kann ich ja nochmal gucken wies in asm ausschaut..

herr-verkehrtherum-smilie-schreiber... :) bzw (:

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */


Dieser Beitrag wurde am 20.02.2003 um 18:14 von Retro bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
20.02.2003, 18:32
anothergb02



Um mal von den Toten aufzuerstehen und hier mal wieder vom Theam abzuschweifen ..
Tron, was ist TI ??? Warum hast du 1.3 in TI ?

?? == ^ )) ??

--

Being in john Malkovich
.....

zum Seitenanfang zum Seitenende Profil || Suche
008
20.02.2003, 18:35
Retro



TI = Technische Informatik, obwohl mein Name bei weiten nicht Tron ist und ?? == ^ )) ?? wohl nicht mehr als infantiles Geblubber..

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
009
20.02.2003, 19:03
Tron



jupp, technische informatik, is jetzt schon ne weile her, hab ich am 20ten januar geschrieben. und warum ich da 1.3 habe? weil ich's drauf habe! (;
als blutiger erstie hab' ich mal schnelle TI geschrieben *G*

Zitat:
bei weiten nicht Tron
retron (:
nach michael ende waere das ein einfaches gelenkwort mit einem gelenk *g*

Zitat:
herr-verkehrtherum-smilie-schreiber... :) bzw (:
IHR komischen rechtshaender macht das verkehrtrum! (:<

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
010
20.02.2003, 19:20
Retro



ich gelenk dich auch gleich *g*

scheint nicht das einzige zu sein was wir gemeinsam haben. ich bin erstsemester tachi und hab ne 1.3(periode) in ti =) 2 + 1 + 1... also bild dir nicht zuviel drauf ein... hehe

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
011
20.02.2003, 21:03
Kriz



Nun ja, bevor wieder so eine Diskussion vom Zaun bricht:

In der reinen Boole'schen Algebra gibt es kein XOR (exklusives ODER). Die einzigen drei Operatoren sind UND, ODER und NICHT. Das exklusive ODER ist eine Kombination aus den Basisoperatoren und hat nach der boole'schen Algebra folgendes Schema:

0,0 -> 0
0,1 -> 1
1,0 -> 1
1,1 -> 0

XOR wird realisiert aus 2 ANDs, 3 NOTs und 1 OR. Die boole'sche Funktion dazu lautet:

Z = NOT((A AND B) OR ((NOT A) AND (NOT B)))

Du siehst Tron, XOR ist kein nativer Bestandteil der boole'schen Algebra, sondern nur ein daraus abgeleitetes Konstrukt.

Kleiner Beweis das die Funktion oben auch stimmt:

A = WAHR
B = WAHR
Z --> FALSCH

Z = NOT((WAHR AND WAHR) OR ((NOT WAHR) AND (NOT WAHR)))
Z = NOT(WAHR OR (FALSCH AND FALSCH))
Z = NOT(WAHR OR FALSCH)
Z = NOT(WAHR)
Z = FALSCH

Und noch einer, damit's auch jeder glaubt =)

A = FALSCH
B = WAHR
Z --> WAHR

Z = NOT((FALSCH AND WAHR) OR ((NOT FALSCH) AND (NOT WAHR)))
Z = NOT(FALSCH OR (WAHR AND FALSCH))
Z = NOT(FALSCH OR FALSCH)
Z = NOT(FALSCH)
Z = WAHR

Und weil's so lustig ist noch die beiden anderen Fälle:

A = WAHR
B = FALSCH
Z --> WAHR

Z = NOT((WAHR AND FALSCH) OR ((NOT WAHR) AND (NOT FALSCH)))
Z = NOT(FALSCH OR (FALSCH AND WAHR))
Z = NOT(FALSCH OR FALSCH)
Z = NOT(FALSCH)
Z = WAHR

A = FALSCH
B = FALSCH
Z --> FALSCH

Z = NOT((FALSCH AND FALSCH) OR ((NOT FALSCH) AND (NOT FALSCH)))
Z = NOT(FALSCH OR (WAHR AND WAHR))
Z = NOT(FALSCH OR WAHR)
Z = NOT(WAHR)
Z = FALSCH

Cu

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
012
20.02.2003, 21:16
Retro



Soll das heissen nur die Grundoperationen NOT, AND und OR gehören zu der boolschen Algebra und abgeleitete Funtionen gelten als Binärarithmetik? Oder wie ist der Unterschied zwischen boolscher Algebra und Binärarithmetik definiert?

(Ja, jetzt will ichs wissen =))

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
013
20.02.2003, 21:30
WareWolf



wenn man die boolsche Algebra auf die Hardware reduziert, hat Kriz schon recht, denn dort ist xor lediglich eine Kombination aus den Halbleitergrundfunktionen
NAND Reihenschaltung zweier npn Transistoren
NOT einfacher npn Transistor
OR zwei parallel geschaltete pn Übergänge (Dioden)

es ergeben sich für exlusiveOder zwei Schaltungsvarianten:

1. A AND NOT B OR B AND NOT A
2. A OR B AND NOT A AND B

(wobei zur Vereinfachung AND ein negiertes NAND darstellt)

ob es allerdings auch als Binärarithmetik bezeichnet werden kann, ist mir eigentlich egal, schliesslich bin ich kein Beamter *gg*

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW


Dieser Beitrag wurde am 20.02.2003 um 21:34 von WareWolf bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
014
20.02.2003, 21:55
Tron



Zitat:
Du siehst Tron, XOR ist kein nativer Bestandteil der boole'schen Algebra, sondern nur ein daraus abgeleitetes Konstrukt.
und? nichtsdestotrotz kann man einen xor-operator in boolscher algebra erklaeren.
in der 'reinen' analysis gibt es auch nur die 15 axiome und trotzdem betreibt man auf ihr aufbauend damit integralrechnung...
deine aussage war, dass xor 'rein' bitarithmetik sei und das ist ganz einfach nicht korrekt.
in 'reiner' (was immer das sein mag) bitarithmetik gibt es auch nur 'und', 'nicht' und 'oder', also bitte komm mit net mit solchen pseudoerklaerungen.

Zitat:
Z = NOT((A AND B) OR ((NOT A) AND (NOT B)))
sehr komplizierte methode ein xor zu realisieren, siehe post #3
und danke, die huntingtonschen axiome kann ich selbst.

Zitat:
wenn man die boolsche Algebra auf die Hardware reduziert, hat Kriz schon recht, denn dort ist xor lediglich eine Kombination aus den Halbleitergrundfunktionen
NAND Reihenschaltung zweier npn Transistoren
NOT einfacher npn Transistor
OR zwei parallel geschaltete pn Übergänge (Dioden)
boolsche algebra ist _viel_ aelter als transistoren oder auch roehren, der gute herr boole hat bestimmt nicht an hardwarerealisierung gedacht.
zudem wuerde man das so _niemals_ realisieren! man muss immer sowohl einen teil haben der die nullen und einen der die einsen liefert, sonst hat man ganz schnell ein paar undefinierte zustaende dank nicht ganz astreiner hardware.

bipolartransistoren werden zudem nur _sehr_ selten verwendet, normalerweise werden schaltungen in cmos realisiert, z.b. ein NOT:
(ph33r my 1337 45C11-4rt-5|<i11z)
Quellcode:.
    |.---U
  /-|.->
  | |.-\
  |    |
a-+    +--not a
  |    |
  | |.-/
  \-|.<-
    |.---GND
ich hoffe, man kann die dinger als selbstsperrende p- (oben) bzw. n-mos (unten) transistoren identifizieren.

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett


Dieser Beitrag wurde am 20.02.2003 um 21:55 von Tron bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
015
20.02.2003, 22:16
Retro



Hrrr, jetzt gehts ja los... CMOS sind ja wohl nur noch die guten alten 40er, die ganze 74er Reihe ist Transistor-Transistor-Logik, daher ja auch TTL.

Die ganzen umgeformten Terme sind auch nichts weiter als angewande De'Morgansche Gesetze...

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
016
20.02.2003, 23:56
Kriz



@Tron: Boole hatte nix mit XOR am Hut. Diese Idee stammt aus der Computertechnik, daher mein Hinweis auf die Binärarithmetik. Und wieso kompliziert? Wenn das eine Anspielung an Warewolfs Schema ist, dann muß ich dir doch hoffentlich nicht sagen, daß NAND und NOR auch nur Konstrukte sind...

Booles Idee war ja die antike griechische Logikphilosophie in mathematisch beweisbares Material zu transformieren. Und die Logik kennt nur diese drei Uroperationen.

@Retro: Nein, daß soll heißen, daß die technische Binärarithmetik sich der boole'schen Algebra bedient hat, um die binären Informationen aus den Hi und Lo Pegelzuständen der Bauteile manipulieren, kontrollieren und letztendlich nutzbar machen zu können. AND, OR und NOT stellen die atomaren Operationen auf das Binärsystem dar. Alles andere wie XOR, NAND, NOR, EQ (XNOR) und all die anderen IC-Schaltungen sind nur daraus abgeleitete Konstrukte zur Realisierung von komplexen Schaltungen.

n8

=)

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
017
21.02.2003, 12:27
Mazze



Zur vollständigkeit halber:
xor != antivalenz
Exclusiv Oder heißt, dass nur ein Eingang _exklusiv_ 1 sein darf und Antivalenz ist das Gegenteil von Äquivalenz, also Gleichwertigkeit:
Quellcode:a b|äq|ant|xor
---+--+---+---
0 0|1 | 0 | 0
0 1|0 | 1 | 1
1 0|0 | 1 | 1
1 1|1 | 0 | 0
Bei 2 Variablen stimmt das ja auch noch, aber bei 3:
Quellcode:a b c|äq|ant|xor
-----+--+---+---
0 0 0|1 | 0 | 0
0 0 1|0 | 1 | 1
0 1 0|0 | 1 | 1
0 1 1|0 | 1 | 0
1 0 0|0 | 1 | 1
1 0 1|0 | 1 | 0
1 1 0|0 | 1 | 0
1 1 1|1 | 0 | 0
cu
Matze

--

BattleTech-MOD:
http://bthl.unitedgaming.net/


Dieser Beitrag wurde am 21.02.2003 um 12:29 von Mazze bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
018
21.02.2003, 17:06
Kriz



Jetzt fängst du auch noch damit an o_O

XOR ist die Antivalenz, die besagt, daß der Ausgang a (um damit mal auf das Bauelement Antivalenz zurückzukommen) genau dann 1 wird, wenn sowohl e0 und e1 beide 1 oder 0 sind.

Hat Er aufgemerkt?

ZWEI Eingänge, nicht e > 2 Eingänge! XOR gibt es nur als Doppeleingangs-Bauteil! Und sag jetzt bloß nicht "Quatsch!", denn ich habe es hier schriftlich vor mir liegen!

Das was du meinst nennt sich "m-aus-n" Element und besagt, daß genau m von n Eingängen 1 sein müssen, damit a ebenfalls 1 wird.

Und nu bin ich es bald leid =)

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
019
21.02.2003, 22:53
WareWolf



Zitat:
der Ausgang a ..genau dann 1 wird, wenn sowohl e0 und e1 beide 1 oder 0 sind.
?? kleiner Flüchtigkeitsfehler nehm ich an, 0 natürlich.

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
020
22.02.2003, 09:53
Kriz



Ja, hast recht. Sollte mal ne 0 werden (scheiß Nummernblock und dicke Finger =)

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
021
22.02.2003, 10:48
mani



..dabei ist doch die 0 taste besonders groß *spam*

--

zum Seitenanfang zum Seitenende Profil || Suche
022
22.02.2003, 13:36
Mazze



Zitat:
XOR gibt es nur als Doppeleingangs-Bauteil! Und sag jetzt bloß nicht "Quatsch!", denn ich habe es hier schriftlich vor mir liegen!
Quatsch! =p

Aber mal im Ernst, ich denke, dass meine Definitionmehr sinn macht, da sich dann das exclusiv erklären würde.

Aber da es das Teil anscheinend nur mit 2 Eingängen gibt erübrigt sich ja die Dskussion....

cu
Matze

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
023
23.02.2003, 15:14
Kriz



Zitat:
..dabei ist doch die 0 taste besonders groß *spam*
Ja, aber du hast die dicken Finger vergessen =)

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche