Geht Varialeninhalte tauschen auch irgendwie anders?

Objektorientierte Skriptsprache: (python.org)
mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Beitrag von mfro » Fr Okt 31, 2014 6:10 pm

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
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

ProgBeginner
Beiträge: 76
Registriert: Mo Jul 29, 2013 2:26 pm

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Beitrag von ProgBeginner » Fr Okt 31, 2014 6:18 pm

Das würde für meine Logik jetzt bedeuten, XOR wäre eine Werteinvertierung ...
Verwechsle niemals Freie Software mit Freeware - da gibt es markante Unterschiede. Freie Software kann Geld kosten, Freeware ist aber selten frei.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Beitrag von mfro » Fr Okt 31, 2014 7:59 pm

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.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

ProgBeginner
Beiträge: 76
Registriert: Mo Jul 29, 2013 2:26 pm

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Beitrag von ProgBeginner » Fr Okt 31, 2014 10:39 pm

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 ;)
Verwechsle niemals Freie Software mit Freeware - da gibt es markante Unterschiede. Freie Software kann Geld kosten, Freeware ist aber selten frei.

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Beitrag von oenone » Sa Nov 01, 2014 6:04 pm

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).

ProgBeginner
Beiträge: 76
Registriert: Mo Jul 29, 2013 2:26 pm

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Beitrag von ProgBeginner » So Nov 02, 2014 9:31 pm

Dass bei Python ^ ein Operator für XOR ist, ist allerdings auch verwirrend.

^ kenn ich aus anderen Sprachen als Operator für Potenzrechnung.
Verwechsle niemals Freie Software mit Freeware - da gibt es markante Unterschiede. Freie Software kann Geld kosten, Freeware ist aber selten frei.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Beitrag von mfro » So Nov 02, 2014 10:52 pm

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 :?:
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Beitrag von oenone » Mo Nov 03, 2014 2:47 pm

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.

ProgBeginner
Beiträge: 76
Registriert: Mo Jul 29, 2013 2:26 pm

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Beitrag von ProgBeginner » Mo Nov 03, 2014 2:54 pm

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 ;)
Verwechsle niemals Freie Software mit Freeware - da gibt es markante Unterschiede. Freie Software kann Geld kosten, Freeware ist aber selten frei.

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Geht Varialeninhalte tauschen auch irgendwie anders?

Beitrag von oenone » Mo Nov 03, 2014 5:06 pm

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

Antworten