Tutorial
Rechnen mit Vergleichen
von ytwinky | Seite 1 von 3 |
Es gibt in FreeBASIC mehrere Möglichkeiten zwei Werte miteinander zu vergleichen. Eines haben diese Möglichkeiten aber gemeinsam: das Ergebnis ist immer
- Zutreffend oder
- Nicht zutreffend
Das sind also zwei Zustände und das erinnert uns an die Definition eines Bits, also der kleinsten Einheit, die ein Computer verarbeiten kann.
Einwand: Ein Bit kann nur Null oder Eins sein, es geht nicht, daß es da Probleme gibt!
Antwort: "Geht nicht" gibt's nicht..
Nochmal auf zum Mitmeißeln auf deutsch:
Ein Bit(BInary digiT) kann zwei Zustände annehmen: Falsch oder Wahr.
Die Grundsprache von (Free-)BASIC ist aber Englisch, deshalb werden wir uns der englischen Pendants FALSE(=Falsch) und TRUE(=Wahr) bedienen. Um herauszufinden, welche Zahlenwerte nun dahinterstecken, benutzen wir das folgende Programm:
Print "Ermitteln der Zahlenwerte von FALSE und TRUE"
Print "FALSE=" &FALSE &!"\nTRUE=" &TRUE
Dummerweise läßt sich dieses Beispiel aber nicht kompilieren. Das liegt jedoch nicht an den Steuerzeichen, die im Ausgabestring sind, sondern irgendetwas ist mit TRUE und FALSE nicht in Ordnung..
Windowsbenutzer könnten jetzt sagen: Mir doch egal, einfach #include "windows.bi" in das Programm schreiben und fertig..
Die stellen wir aber gleich ruhig mit ein paar Testanweisungen: Wir wissen, daß FreeBASIC Vergleiche kennt und wir wissen auch, daß das Ergebnis eines Vergleichs entweder FALSE oder TRUE ist. Vergleichen wir 1 mit 0 erwarten wir FALSE, wohin gegen wir beim Vergleich von 1 mit 1 TRUE erwarten; also dann:
#include "windows.bi"
Print "Ermitteln der Zahlenwerte von FALSE und TRUE"
Print "FALSE=" &FALSE &!"\nTRUE=" &TRUE
Print "1=0: " &(1=0) &!"\n1=1: " &(1=1)
Wir stellen fest, daß es für TRUE offensichtlich ZWEI Werte gibt!
Das kann nicht sein. Erinnern wie uns an den Einwand: Ein Bit kann nur Null oder Eins sein..
Wenn wir diesen Einwand mit der Ausgabe vergleichen, stellen wir fest, daß aus Programmausgabe und Einwand eines hervorgeht: FALSE=0
Prima, TRUE ist nun aber das Gegenteil von FALSE und das nutzen wir aus, indem wir den FreeBASIC-Befehl Not benutzen, der einen Integer-Wert in sein Gegenteil umwandelt. Da bei Null keine Bits gesetzt sind, werden also alle Bits beim Gegenteil gesetzt. Nun wären alle Bits bei einem Byte aber 255, bei einem Short 65535 und bei einem Integer 4294967395. Das wäre aber zu umständlich zu handhaben, da ja für die verschiedenen Typen unterschiedliche Werte für TRUE herauskämen. Was tun? Ganz einfach: die vorzeichenbehaftete Darstellung wählen und schon kommt bei allen Typen als Ergebnis für TRUE -1 heraus, voilá..
Wenn wir also in unseren Programmen vergleichen wollen, gilt es, dies zu beachten. Wir können ohne Bedenken FALSE mit 0 gleichsetzen und vergleichen. Aber wenn wir auf TRUE prüfen, müssen wir mit dem Zahlenwert aufpassen!
Jetzt könnten wir natürlich sämtliche .bi-Dateien daraufhin prüfen, wo denn nun überall TRUE auf 1 gesetzt wird..
..eine mühsame Aufgabe, die aber beim nächsten Compiler-Update zunichte gemacht wird. Unter Umständen kann diese Maßnahme jedoch den gesamten Compiler außer Gefecht setzen, da die Anweisungen in den .bi-Dateien ja aus irgendeinem Grund auch dort drin stehen..
Freundlicherweise bietet uns FreeBASIC mit der Const-Anweisung eine Möglichkeit, die Werte nach unseren Wünschen anzupassen. Dabei haben wir die Wahl: wir könnten schreiben
Const FALSE=1=0, TRUE=1=1
Das ist sicherlich nicht falsch, 'schöner' ist jedoch diese Variante:
Const FALSE=0, TRUE=Not FALSE
..was (auch sprachlich) verständlicher aussieht^^
Na schön, wo ist der Vorteil? Ganz einfach, wenn wir in unseren Programmen TRUE mit 1 besetzen, dann müssen wir auch immer selber den Wert setzen:
..
kleiner=IIf(a<b, 1, 0)..
..während wir sonst die direkte Zuweisung
..
kleiner=a<b
benutzen könnten.
Soviel zum Thema '..es geht nicht, daß es da Probleme gibt' xD
Doch jetzt wissen wir erst, was FALSE und was TRUE ist..
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|