Bitweise Operationen mit ganzen Zahlen
Mit dieser Funktion können Ganzzahlen als Bitmuster behandelt werden, die die Zweierkomplementwerte darstellen, bei denen die Bitposition N
den Wert 2**N
aufweist. Bit werden beginnend bei 0 nummeriert. Diese Operationen funktionieren so, als ob das Vorzeichenbit einer ganzen Zahl endlos nach links erweitert wird. Daher weisen positive ganze Zahlen überall oberhalb des werthöchsten 0-Bits auf, negative ganze Zahlen 1-Bits.
Funktion | Ergebnis | Beschreibung |
---|---|---|
~~ GANZZ1
|
ganze Zahl | Ergibt das bitweise Komplement der ganzen Zahl GANZZ1. Im Ergebnis steht also eine 1 für jede Bitposition, bei der GANZZ1 den Wert 0 aufweist. Es gilt immer:
~~ GANZZ = -(GANZZ + 1) .
|
GANZZ1 || GANZZ2
|
ganze Zahl | Das Ergebnis dieser Operation ist das bitweise "inklusive Oder" von GANZZ1 und GANZZ2. Im Ergebnis steht also eine 1 für jede Bitposition, bei der bei GANZZ1 und/oder bei GANZZ2 der Wert 1 steht. |
GANZZ1 ||/& GANZZ2
|
ganze Zahl | Das Ergebnis dieser Operation ist das bitweise "exklusive Oder" von GANZZ1 und GANZZ2. Im Ergebnis steht also eine 1 für jede Bitposition, bei der entweder bei GANZZ1 oder bei GANZZ2 der Wert 1 steht, nicht jedoch bei beiden. |
GANZZ1 && GANZZ2
|
ganze Zahl | Ergibt das bitweise "Und" der ganzen Zahlen GANZZ1 und GANZZ2. Im Ergebnis steht also eine 1 für jede Bitposition, bei der sowohl bei GANZZ1 als auch beiGANZZ2 der Wert 1 steht. |
GANZZ1 &&~~ GANZZ2
|
ganze Zahl | Ergibt das bitweise "Und" von GANZZ1 und das bitweise Komplement von GANZZ2. Im Ergebnis steht also eine 1 für jede Bitposition, bei der bei GANZZ1 der Wer 1 und beiGANZZ2 der Wert 0 steht. Diese Operation ist identisch mit GANZZ1 && (~~GANZZ2) und ist sinnvoll zum Bereinigen von in GANZZ2 gesetzten Bits von GANZZ1. |
GANZZ << N
|
ganze Zahl | Ergibt das Bitmuster von GANZZ1, um N Positionen nach links verschoben. Ein negativer Wert von N führt zu einer Verschiebung nach rechts. |
GANZZ >> N
|
ganze Zahl | Ergibt das Bitmuster von GANZZ1, um N Positionen nach rechts verschoben. Ein negativer Wert von N führt zu einer Verschiebung nach links. |
GANZZ1 &&=_0 GANZZ2
|
boolesch | Entspricht dem booleschen Ausdruck GANZZ1 && GANZZ2 /== 0 , ist jedoch effizienter. |
GANZZ1 &&/=_0 GANZZ2
|
boolesch | Entspricht dem booleschen Ausdruck GANZZ1 && GANZZ2 == 0 , ist jedoch effizienter. |
integer_bitcount(GANZZ)
|
ganze Zahl | Zählt die Anzahl der 1- oder 0-Bits in der Zweierkomplementdarstellung von GANZZ. Wenn GANZZ nicht negativ ist, ist N die Anzahl der 1-Bits. Wenn GANZZ negativ ist, gibt dieser Wert die Anzahl der 0-Bits an. Aufgrund der Vorzeichenerweiterung gibt es unendlich Viele 0-Bits in nicht negativen ganzen Zahlen bzw. 1-Bits in negativen ganzen Zahlen. Es gilt immer: integer_bitcount(GANZZ) = integer_bitcount(-(GANZZ+1)) . |
integer_leastbit(GANZZ)
|
ganze Zahl | Gibt die Bitposition N des niedrigstwertigen Bits an, das in der ganzen Zahl GANZZ gesetzt wurde. N ist die höchste Potenz von 2, durch die sich GANZZ ohne Rest teilen lässt. |
integer_length(GANZZ)
|
ganze Zahl | Ergibt die Länge von GANZZ als ganze Zweierkomplementzahl in Bit. N ist also die kleinste ganze Zahl, sodass gilt: GANZZ < (1 << N), wenn GANZZ >= 0. GANZZ >= (-1 << N), wenn GANZZ <
0 . Wenn GANZZ nicht negativ ist, ist für die Darstellung von GANZZ als ganze Zahl ohne Vorzeichen ein Feld mit mindestens N Bit erforderlich. Alternativ sind, unabhängig vom Vorzeichen, mindestens N+1 Bit erforderlich, um GANZZ als ganze Zahl mit Vorzeichen darzustellen. |
testbit(GANZZ, N)
|
boolesch | Testet das Bit an Position N in der ganzen Zahl GANZZ und ergibt den Status von Bit N als booleschen Wert, der bei 1 "wahr" und bei 0 "falsch" ist. |