Wussten Sie, dass FrameScript über bitweise Operatoren 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 = 12301111011b
— 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 dann0A0h
. - FrameScript unterscheidet nicht zwischen Groß- und Kleinschreibung, d.h. Sie können auch
7bh
oder7bH
oder7BH
schreiben, mir erscheint aber7Bh
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 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.