Seite 2 von 3

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Verfasst: Fr Okt 31, 2014 6:10 pm
von mfro
XOR bedeutet "exclusives oder", d.h. nur wenn genau einer der beiden Operanden 1 ist, ist auch das Ergebnis 1.

Also

0 ^ 0 = 0
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0

oder, für dein (mein) Beispiel:

50 ^ 10 = 56
0011 0010 ^ 0000 1010 = 0011 1000

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Verfasst: Fr Okt 31, 2014 6:18 pm
von ProgBeginner
Das würde für meine Logik jetzt bedeuten, XOR wäre eine Werteinvertierung ...

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Verfasst: Fr Okt 31, 2014 7:59 pm
von mfro
ProgBeginner hat geschrieben:Das würde für meine Logik jetzt bedeuten, XOR wäre eine Werteinvertierung ...
Ähm, nö. Vielleicht solltest Du mal deine Logik überdenken ;)

XOR ist XOR. Das Ergebnis ist genau dann 1, wenn genau einer der Operanden 1 ist. Man kann auch sagen, genau dann, wenn die Operanden unterschiedlich sind.

und:

man kann damit (und einer zusätzlichen UND-Verknüpfung, die ein evt. Carry hält) addieren. Die Wahrheitstabelle von "+" und "^" ist für einstellige Binärzahlen identisch. Damit lässt sich ein Addierer für beliebig lange Binärzahlen bauen:

Code: Alles auswählen

s1 = '0111' # 7
s2 = '0100' # 4
s3 = ''
carry = 0
summe = ''

for i in range (len(s1) - 1, -1, -1):
    summe = int(s1[i]) ^ int(s2[i]) ^ carry
    carry = int(s1[i]) & int(s2[i])
    s3 = unichr(summe + ord('0')) + s3

print 'Ergebnis=', s3 # 7 + 4 = 11 -> 1011
Die Addierer der ALUs in deinem Rechner funktionieren nach exakt demselben Prinzip.

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Verfasst: Fr Okt 31, 2014 10:39 pm
von ProgBeginner
Das Spielchen, über das wir hier philosophieren, kann man sich übrigens gerne unter

Code: Alles auswählen

git clone https://github.com/SaschaMester/Zahlenraten
herunterladen - ist nicht sonderlich groß.

Über Verbesserungsvorschläge am Code bin ich jederzeit dankbar, das ist mein erstes Python-Projekt, was n bisschen mehr hergibt, als einfach nur "Hello World" auszugeben - von daher: I'm still learning ;)

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Verfasst: Sa Nov 01, 2014 6:04 pm
von oenone
Logisches UND vs Bitweises UND:

Logisches UND kennt nur zwei Werte: Wahr und Falsch. Das wird wohl das sein, das dein Taschenrechner kann.

Bitweises UND verknüpft die einzelnen Bits der (Integer-)Zahlen miteinander.

Das sollte es ein wenig verständlicher machen. (Gilt genauso mit ODER oder XODER).

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Verfasst: So Nov 02, 2014 9:31 pm
von ProgBeginner
Dass bei Python ^ ein Operator für XOR ist, ist allerdings auch verwirrend.

^ kenn ich aus anderen Sprachen als Operator für Potenzrechnung.

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Verfasst: So Nov 02, 2014 10:52 pm
von mfro
ProgBeginner hat geschrieben:...^ kenn ich aus anderen Sprachen als Operator für Potenzrechnung.
Ich kenn' längst nicht alle, aber mir würde auf Anhieb keine (vernünftige) Programmiersprache einfallen, die '^' für die Potenzierung benutzt :?:

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Verfasst: Mo Nov 03, 2014 2:47 pm
von oenone
ProgBeginner hat geschrieben:^ kenn ich aus anderen Sprachen als Operator für Potenzrechnung.
Mir fällt auf Anhieb keine ein. Bei welchen ist das so?

Bei den meisten wird ** als Potenzierung benutzt, sofern es überhaupt direkt als Operator verfügbar ist.

Bei LaTeX wird es als Hochstellung benutzt, allerdings hat das nicht viel mit Programmierung zu tun.

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Verfasst: Mo Nov 03, 2014 2:54 pm
von ProgBeginner
Stimmt ... doch nicht, ich muss mich korrigieren. ;)

Hatte das von PHP so in Erinnerung - aber auch Erinnerungen können sich täuschen. ;)

Nobody's perfect oder wie war dat :D


Langer Rede kurzer Sinn - hab nix gesagt ( bzgl ^ ) - alles zurück auf 0 ;)

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Verfasst: Mo Nov 03, 2014 5:06 pm
von oenone
Hab doch eine gefunden: D benutzt ^^ als Exponential-Operator. Außerdem kann man in vielen Funktionalen Sprachen das ^ oder ^^ als Funktionsname benutzen (dort ist ja alles eine Funktion, es gibt quasi kene Operatoren).

Siehe auch: http://rosettacode.org/wiki/Exponentiation_operator