4D v16.3Bit Operatoren |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
Bit Operatoren
|
Operation | Operator | Syntax | Ergibt |
Bitweises UND | & | Lang & Lang | Lang |
Bitweises ODER (inklusiv) | | | Lang | Lang | Lang |
Bitweises ODER (exklusiv) | ^| | Lang ^| Lang | Lang |
Left Bit Shift | << | Lang << Lang | Lang (1) |
Right Bit Shift | >> | Lang >> Lang | Lang (1) |
Bit setzen | ?+ | Lang ?+ Lang | Lang (2) |
Bit löschen | ?- | Lang ?- Lang | Lang (2) |
Bit Test | ?? | Lang ?? Lang | Boolean (2) |
Hinweise
Folgende Tabelle zeigt die Bit Operatoren und ihre Auswirkung:
Operation | Beschreibung |
Bitweises UND | Jedes resultierende Bit ist das logische UND der Bits in den beiden Operanden. |
Hier ist die logische UND Tabelle: | |
1 & 1 --> 1 | |
0 & 1 --> 0 | |
1 & 0 --> 0 | |
0 & 0 --> 0 | |
Das resultierende Bit ist 1, wenn beide Bits der Operanden 1 sind; sonst ist das resultierende Bit 0. | |
Bitweises ODER (inkl.) | Jedes resultierende Bit ist das logische ODER der Bits in den beiden Operanden. |
Hier ist die logische ODER Tabelle: | |
1 | 1 --> 1 | |
0 | 1 --> 1 | |
1 | 0 --> 1 | |
0 | 0 --> 0 | |
Das resultierende Bit ist 1, wenn mindestens ein Bit der beiden Operanden 1 ist; sonst ist das resultierende Bit 0. | |
Bitweises ODER (exkl.) | Jedes resultierende Bit ist das logische ODER (exkl.) der Bits in den beiden Operanden. |
Hier ist die logische ODER (exkl.) Tabelle: | |
1 ^| 1 --> 0 | |
0 ^| 1 --> 1 | |
1 ^| 0 --> 1 | |
0 ^| 0 --> 0 | |
Das resultierende Bit ist 1, wenn nur ein Bit der beiden Operanden 1 ist; sonst ist das resultierende Bit 0. | |
Left Bit Shift | Der resultierende Wert wird auf den ersten Operanden gesetzt, dann werden die Bits um die im zweiten Operanden angegebenen Stellen nach links verschoben. Die Bits auf der linken Seite gehen verloren, die neuen Bits auf der rechten Seite werden auf 0 gesetzt. |
Hinweis: Werden nur die positiven Werte berücksichtigt, ist das Verschieben um N Bits nach links dasselbe wie das Multiplizieren mit 2^N. | |
Right Bit Shift | Der resultierende Wert wird auf den ersten Operanden gesetzt, dann werden die Bits um die angegebenen Stellen nach rechts verschoben. Die Bits auf der rechten Seite gehen verloren, die neuen Bits auf der linken Seite werden auf 0 gesetzt. |
Hinweis: Werden nur die positiven Werte berücksichtigt, ist das Verschieben um N Bits nach rechts dasselbe wie das Dividieren durch 2^N. | |
Bit setzen | Der resultierende Wert wird auf den ersten Operanden gesetzt, dann wird das Bit, dessen Stelle im zweiten Operanden angegeben ist, auf 1 gesetzt. Die anderen Bits bleiben unverändert. |
Bit Löschen | Der resultierende Wert wird auf den ersten Operanden gesetzt, dann wird das Bit, dessen Stelle im zweiten Operanden angegeben ist, auf 0 gesetzt. Die anderen Bits bleiben unverändert. |
Bit Test | Ergibt wahr, wenn im ersten Operanden das Bit, dessen Stelle im zweiten Operanden angegeben ist, gleich 1 ist. Ergibt Falsch, wenn im ersten Operanden das Bit, dessen Stelle im zweiten Operanden angegeben ist, gleich 0 ist. |
1) Folgende Tabelle zeigt für jeden Bit Operator ein Beispiel:
Beispiel | Ergebnis | |
Bitweises UND | 0x0000FFFF & 0xFF00FF00 | 0x0000FF00 |
Bitweises ODER (incl.) | 0x0000FFFF | 0xFF00FF00 | 0xFF00FFFF |
Bitweises ODER (excl.) | 0x0000FFFF ^| 0xFF00FF00 | 0xFF0000FF |
Left Bit Shift | 0x0000FFFF << 8 | 0x000FFFF0 |
Right Bit Shift | 0x0000FFFF >> 8 | 0x00000FFF |
Bit setzen | 0x00000000 ?+ 16 | 0x00010000 |
Bit löschen | 0x00010000 ?- 16 | 0x00000000 |
Bit Test | 0x00010000 ?? 16 | True |
Konstante | Typ | Wert |
Changed resource bit | Lange Ganzzahl | 1 |
Changed resource mask | Lange Ganzzahl | 2 |
Locked resource bit | Lange Ganzzahl | 4 |
Locked resource mask | Lange Ganzzahl | 16 |
Preloaded resource bit | Lange Ganzzahl | 2 |
Preloaded resource mask | Lange Ganzzahl | 4 |
Protected resource bit | Lange Ganzzahl | 3 |
Protected resource mask | Lange Ganzzahl | 8 |
Purgeable resource bit | Lange Ganzzahl | 5 |
Purgeable resource mask | Lange Ganzzahl | 32 |
System heap resource bit | Lange Ganzzahl | 6 |
System heap resource mask | Lange Ganzzahl | 64 |
Mit diesen Konstanten können Sie den Wert testen, den die Funktion Get resource properties zurückgibt oder den Wert erstellen, der im Befehl _o_SET RESOURCE PROPERTIES übergeben wurde. Konstanten mit der Endung “bit” liefern die Position des Bit, das Sie testen, löschen oder setzen wollen. Konstanten mit der Endung “mask” liefern einen Wert vom Typ lange Ganzzahl, in der nur das Bit, das Sie testen, löschen oder setzen wollen, den Wert 1 hat.
Sie wollen zum Beispiel prüfen, ob eine Ressource (deren Eigenschaften Sie aus der Variablen $vlResAttr erhalten haben) aus dem Speicher entfernbar ist:
If($vlResAttr ?? Purgeable resource bit) ` Ist die Ressource entfernbar?
oder:
If(($vlResAttr & Purgeable resource mask)#0)Ist die Ressource entfernbar?
Umgekehrt können Sie mit diesen Konstanten dasselbe Bit setzen. Schreiben Sie:
$vlResAttr:=$vlResAttr ?+Entfernbares Ressourcen Bit
oder:
$vlResAttr:=$vlResAttr |Entfernbares Ressourcen Bit
3) Dieses Beispiel speichert zwei Werte vom Typ Zahl in einem Wert vom Typ Lange Ganzzahl:
$vlLong:=($viIntA<<16)|$viIntB ` Speichere zwei Zahlen in Langer Ganzzahl
$vlIntA:=$vlLong>>16 ` Berechne Zahl aus dem high-word-Bereich
$viIntB:=$vlLong & 0xFFFF ` Berechne Zahl aus dem low-word-Bereich
Tipp: Seien Sie vorsichtig beim Bearbeiten von Werten vom Typ Ganzzahl oder Zahl in Ausdrücken, die sowohl numerische als auch Bit Operatoren einsetzen. Das hohe Bit (Bit 31 für Lange Ganzzahl, Bit 15 für Zahl) bestimmt das Vorzeichen des Wertes—positiv, wenn es gelöscht wird, negativ, wenn es gesetzt wird. Numerische Operatoren finden anhand dieses Bits das Vorzeichen des Wertes heraus, für Bit Operatoren ist dieses Bit nicht relevant.
Bildoperatoren
Boolean Operatoren
Datumsoperatoren
Numerische Operatoren
Operatoren
String Operatoren
Vergleichsoperatoren
Zeitoperatoren
Produkt: 4D
Thema: Operatoren
4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)