4D v16.3

Bit Operatoren

Home

 
4D v16.3
Bit Operatoren

Bit Operatoren  


 

 

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 31 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 ist das Ergebnis des Ausdrucks nicht signifikant.

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

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

OperationBeispielErgebnis

Bitweises UND

0x0000FFFF & 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 unter dem Thema Ressourcen Eigenschaften:

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.



Siehe auch 

Bildoperatoren
Boolean Operatoren
Datumsoperatoren
Numerische Operatoren
Operatoren
String Operatoren
Vergleichsoperatoren
Zeitoperatoren

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Operatoren

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)