Bit Operatoren

4D - Documentation   Français   English   German   English   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next

Version 6.0


Bit Operatoren arbeiten mit Ausdrücken oder Werten vom Typ Lange Ganzzahl.

Hinweis: Übergeben Sie einem Bit Operator einen Wert vom Typ Ganzzahl oder Zahl, wertet 4D diesen vor der Berechnung mit einem Bit Operator als Lange Ganzzahl.

Beim Arbeiten mit Bit Operatoren müssen Sie sich den Wert vom Typ Lange Ganzzahl als Array mit 32 Bits vorstellen. Bits sind von rechts nach links von 0 bis 31 durchnumeriert.

Da jedes Bit entweder 0 oder 1 ist, können Sie sich einen Wert vom Typ Lange Ganzzahl auch als Wert vorstellen, der 32 Boolean Werte speichern kann. Ein Bit gleich 1 bedeutet Wahr, ein Bit gleich 0 bedeutet Falsch.

Ein Ausdruck mit Bit Operator gibt einen Wert von Typ Lange Ganzzahl zurück, mit Ausnahme des Operators Bit Test. Hier wird ein Wert vom Typ Boolean zurückgegeben. Es gibt folgende Bit Operatoren:

OperationOperatorSyntaxErgibt
Bitweises UND&Lang & LangLang
Bitweises ODER (inklusiv)|Lang | LangLang
Bitweises ODER (exklusiv)^|Lang ^| LangLang
Left Bit Shift<<Lang << LangLang (1)
Right Bit Shift>>Lang >> LangLang (1)
Bit setzen?+Lang ?+ LangLang (2)
Bit löschen?-Lang ?- LangLang (2)
Bit Test??Lang ?? LangBoolean (2)

Hinweise

(1) Für die Operationen Left Bit Shift und Right Bit Shift gibt der zweite Operand die Stellen an, um die die Bits des ersten Operanden verschoben werden. Deshalb sollte dieser zweite Operand zwischen 0 und 32 liegen. Beachten Sie jedoch, dass das Verschieben von 0 einen unveränderten Wert zurückgibt und mehr als 31 Bits 0x00000000 zurückgibt, da hier alle Bits verloren gehen. Übergeben Sie als zweiten Operanden einen anderen Wert, ist das Ergebnis nicht signifikant.

(2) Für die Operationen Bit setzen, Bit löschen und Bit Test gibt der zweite Operand die Stelle des entsprechenden Bit an. Deshalb muss dieser zweite Operand zwischen 0 und 31 liegen. Sonst gibt der Ausdruck den Wert des ersten Operanden für Bit setzen und Bit löschen unverändert zurück und Bit Test ergibt den Wert False.

Folgende Tabelle zeigt die Bit Operatoren und ihre Auswirkung:

OperationBeschreibung
Bitweises UNDJedes 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 ShiftDer 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 ShiftDer resultierende Wert wird auf den ersten Operanden gesetzt,
dann werden die Bits um die im zweiten Operanden
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 setzenDer 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öschenDer 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 TestErgibt 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.

Beispiele

(1) Folgende Tabelle zeigt für jeden Bit Operator ein Beispiel:

OperationBeispielErgebnis
Bitweises UND0x0000FFFF & 0xFF00FF000x0000FF00
Bitweises ODER (incl.)0x0000FFFF | 0xFF00FF000xFF00FFFF
Bitweises ODER (excl.)0x0000FFFF ^| 0xFF00FF000xFF0000FF
Left Bit Shift0x0000FFFF << 80x000FFFF0
Right Bit Shift0x0000FFFF >> 80x00000FFF
Bit setzen0x00000000 ?+ 160x00010000
Bit löschen0x00010000 ?- 160x00000000
Bit Test0x00010000 ?? 16True

(2) 4D bietet viele vordefinierte Konstanten. Ihre Bezeichnung endet in einigen Fällen mit "bit" oder "mask." Das gilt zum Beispiel für die Konstanten im Bereich Ressourcen-Eigenschaften:

KonstanteTypWert
System heap resource maskLange Ganzzahl64
System heap resource bitLange Ganzzahl6
Purgeable resource maskLange Ganzzahl32
Purgeable resource bitLange Ganzzahl5
Locked resource maskLange Ganzzahl16
Locked resource bitLange Ganzzahl4
Protected resource maskLange Ganzzahl8
Protected resource bitLange Ganzzahl3
Preloaded resource maskLange Ganzzahl4
Preloaded resource bitLange Ganzzahl2
Changed resource maskLange Ganzzahl2
Changed resource bitLange Ganzzahl1

Mit diesen Konstanten können Sie den Wert testen, den die Funktion Get resource properties zurückgibt oder den Wert erstellen, der im Befehl 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.

Referenz

Bildoperatoren, Boolean Operatoren, Datumsoperatoren, Numerische Operatoren, Operatoren, String Operatoren, Vergleichsoperatoren, Zeitoperatoren.


4D - Documentation   Français   English   German   English   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next