Bitweise Operatoren

Wussten Sie, dass FrameScript über [bitweise Operatoren](http://de.wikipedia.org/wiki/Bitweiser_Operator) verfügt und auch komfortable Möglichkeiten bereit stellt mit Binär- und Hex-Zahlen zu arbeiten?

Zunächst zur Darstellung von Ganzzahlen (Integer), da haben Sie drei Möglichkeiten:

* `123` — als Folge von Ziffern ist es eine Dezimalzahl, das wussten Sie 🙂
* `7Bh` — als Folge von Hex-Buchstaben mit einem »h« am Ende ist es eine hexadezimal notierte Zahl, hier also 7 × 16 + 11 = 123
* `01111011b` — als Folge von Nullen und Einsen mit einem »b« am Ende haben wir die Binärzahl, hier also 64 + 32 + 16 + 8 + 2 + 1 = 123

Wenn es jetzt darum geht, mit diesen Ganzzahlen zu rechnen, gibt es folgendes beachten:

* Bei der Hex-Notation muss als erstes Zeichen immer einen Ziffer stehen, d.h. statt `A0h` (für 160) schreiben Sie dann `0A0h`.
* FrameScript unterscheidet nicht zwischen Groß- und Kleinschreibung, d.h. Sie können auch `7bh` oder `7bH` oder `7BH` schreiben, mir erscheint aber `7Bh` am übersichtlichsten.
* Die Division zweier Ganzzahlen wird als Integer-Division ausgeführt: 9 / 4 = 2, wenn Sie hier ein Gleitkommaergebnis wollen, muss einen der Zahlen eine Real-Zahl werden, also z.B. 9.0 / 4 = 2.25

Mit Integer-Zahlen können aber auch die bitweisen Operationen ODER bzw. UND durchgeführt werden:

* ODER: `0101b #| 0011b = 0111b` , `5 #| 3 = 7`
* UND: `0101b #& 0011b = 0001b` , `5 #& 3 = 1`

Eine direkte Anwendung im FrameMaker-Umfeld ist die Einstellung, auf welchen Farbauszügen einen Farbe sichtbar, ausgeblendet oder ausgespart sein soll (Menüpunkt `Darstellung > Farbe > Darstellung`). Dafür zuständig ist die Eigenschaft `ColorViewCtl`, eine 12-Bit-Nummer. Um zu überprüfen, ob einen Farbe in Farbauszug 3 unsichtbar ist, muss Bit 5 gesetzt sein (= eine 1 enthalten). Das kann man sehr komfortabel folgendermaßen überprüfen:

~~~~
If (lcColor.ColorViewCtl #& 10000b)
// weitere Operationen
EndIf
~~~~

In [komplexeren Anwendungen](http://www.herongyang.com/Unicode/UTF-8-UTF-8-Encoding-Algorithm.html) kommen auch Shift-Vorgänge (Verschieben aller Bits nach rechts oder links) vor, die durch die Operatoren `>>` bzw. `<<` dargestellt werden. Diese Operationen entsprechen einer Integer-Division bzw. Multiplikation mit Zweierpotenzen, sind aber performanter: * LINKS-SHIFT um 2 Bits: `0101b << 2 = 10100b` , `5 * 2² = 20` * RECHTS-SHIFT um 1 Bit: `1100b >> 1 = 0110b` , `12 / 2¹ = 6`

Eine letzte Bemerkung: Die bitweisen Operatoren haben einen höheren Rang als die anderen arithmetischen Operatoren, d.h. bei Kombinationen müssen Sie andere Operationen möglicherweise in Klammern setzen.

Dieser Beitrag wurde unter Lernen veröffentlicht. Setze ein Lesezeichen auf den Permalink.