Binäre Operatoren
Informationen
- Kategorien: Kernel | Klassenformeln
- Version: 15.0.0.3559
- Veröffentlichungsdatum: Donnerstag, 22. März 2012
- Entwickler: Schulze
- Benötigt Datenbankänderung: Nein
- Betreff: Binäre Operatoren
Beschreibung
Zusätzlich zu den logischen Vergleichs-Operatoren && (logisches AND) und || ((logisches OR) können in Klassenformeln jetzt auch binäre Vergleichs- und Verschiebe-Operatoren verwendet werden.
Der Unterschied zu den logischen Operatoren ist, dass binäre Operatoren bitweise arbeiten.
Folgende Operatoren stehen zur Verfügung:
Binäre Vergleichs-Operatoren
& (bitweises AND) wird auf zwei Bitfolgen gleicher Länge angewendet und führt die logische UND-Verknüpfung auf jedem Paar korrespondierender Bits durch. Das Ergebnisbit ist 1, falls beide Bits 1 sind, ansonsten 0. z.B. 14 & 7 = 1110 & 0111
0110 = 6
| (bitweises OR)
gibt eine Bitfolge derselben Länge zurück, indem jeweils die Bits an der gleichen Stelle (jeweils das erste Bit, jeweils das zweite Bit usw.) mit einem logischen ODER verknüpft werden
z.B. 14 | 7 = 1110 | 0111
1111 = 15
^ (bitweises XOR, exklusives OR)
wird auf zwei Bitfolgen der gleichen Länge angewendet und führt die logische XOR-Operation auf jedem Paar korrespondierender Bits durch. Das Ergebnisbit ist 1, falls die zwei Bits unterschiedlich sind, und 0, falls sie gleich sind.
z.B. 14 ^ 7 = 1110 ^ 0111
1001 = 9
~ (bitweises NOT bzw. Binäres Complement)
führt eine logische Negation jedes Bits durch und bildet damit das Einerkomplement einer Binärzahl, jede 0 wird durch eine 1 ausgetauscht und umgekehrt
die Operation wird immer auf der ganzen Integerzahl ausgeführt (4 Byte = 32 Bit) z.B ~14 14 = 0xE= 0000 0000 0000 0000 0000 0000 0000 1110 ==> ~0xE = 1111 1111 1111 1111 1111 1111 1111 0001 = 0xFFFFFFF1 = 4294967281
- Binäre Verschiebe-Operatoren
Die Operatoren << und >> dienen dazu, den Inhalt einer Variablen bitweise um eine angegebene Anzahl von Stellen nach links bzw. nach rechts zu verschieben.
<< (Shift-Left) , z.B schiebt 2 << 1 alle Bits der Zahl 2 (binär 0010) um 1 Stelle nach links -> Ergebnis = 4 (binär 0100)
(Shift-Right), z.B schiebt 2 >> 1 alle Bits der Zahl 2 (binär 0010) um 1 Stelle nach rechts -> Ergebnis = 1 (binär 0001)
Setzen/Löschen von Bits:
Setzen: $mask = 1 << $Bitnummer; /* Bitnummer ab 0 von rechts gezählt */ $var = $var | $mask;
Löschen: $mask = ~( 1 << $Bitnummer ); /* Bitnummer ab 0 von rechts gezählt */ $var = $var & $mask;
Beispielcode
var int $a;
var int $b;
var string $sResult;
$a = 0x0e; // dezimal 14, binär 1110
$b = 0x07; // dezimal 7, binär 0111
$sResult = StrFormat(
"a = {0}, b = {1}\n" +
"a < b = {2}\n" +
"a > b = {3}\n" +
"a << b = {4} (0x{4:X})\n" +
"a >> b = {5}\n",
$a, $b,
$a < $b,
$a > $b,
$a << $b,
$a >> $b
);
MessageBox( $sResult );
$sResult = StrFormat(
"a = {0}, b = {1}\n" +
"a && b = {2}\n" +
"a || b = {3}\n" +
"a & b = {4}\n" +
"a | b = {5} (0x{5:X})\n" +
"a ^ b = {6}\n" +
"~a = {7} (0x{7:X})",
$a, $b,
$a && $b,
$a || $b,
$a & $b,
$a | $b,
$a ^ $b,
~$a
);
MessageBox( $sResult );
/*
Ausgabe:
---------------------------
a = 14, b = 7
a < b = 0
a > b = 1
a << b = 1792 (0x700)
a >> b = 0
---------------------------
pit-FMDB
---------------------------
a = 14, b = 7
a && b = 1
a || b = 1
a & b = 6
a | b = 15 (0xF)
a ^ b = 9
~a = -15 (0xFFFFFFF1)
---------------------------
*/