Bits setzen und lesen 

In Hexadezimalfeldfern vom Typ X können einzelne Bits gesetzt und ausgelesen werden.

Bits setzen

Zum Setzen eines einzelnen Bits verwendet man die Anweisung

SET BIT <n> OF <f> [TO <b>].

Diese Anweisung setzt das Bit an der Stelle <n> des Felds <f> auf 1 bzw. auf den Wert des Felds <b>. Das Feld <n> muß als positive ganze Zahl interpretierbar sein. Das Feld <f> muß den Datentyp X haben. Das Feld <b> muß den Inhalt 0 oder 1 haben. Falls das Bit gesetzt werden kann, wird SY-SUBRC auf Null gesetzt. Falls der Inhalt von <n> größer als die Länge von <f> ist, ist SY-SUBRC ungleich Null. Bei ungültigen Werten von <n> und <b> treten Laufzeitfehler auf.

DATA hex(3) TYPE x.

SET BIT: 09 OF hex TO 1,
         10 OF hex TO 0,
         11 OF hex TO 1,
         12 OF hex TO 1,
         13 OF hex TO 0,
         14 OF hex TO 1,
         15 OF hex TO 0,
         16 OF hex TO 1.

WRITE hex.

Die Bits des zweiten Bytes im dreistelligen Hexadezimalfeld HEX werden auf '10110101' gesetzt und die Listenausgabe ist wie folgt:

00B500

Der dezimale Wert des zweiten Bytes ist 181.

Bits lesen

Zum Lesen eines einzelnen Bits verwendet man die Anweisung

GET BIT <n> OF <f> INTO <b>.

Diese Anweisung liest das Bit an der Stelle <n> des Felds <f> in das Feld <b>. Das Feld <n> muß als positive ganze Zahl interpretierbar sein. Das Feld <f> muß den Datentyp X haben. Falls das Bit gelesen werden kann, wird SY-SUBRC auf Null gesetzt. Falls der Inhalt von <n> größer als die Länge von <f> ist, ist SY-SUBRC ungleich Null und <b> wird auf Null gesetzt. Bei ungültigen Werten von <n> tritt ein Laufzeitfehler auf.

DATA: hex(1) TYPE x VALUE 'B5',
      b(1) TYPE n.

DO 8 TIMES.
  GET BIT sy-index OF hex INTO b.
  WRITE b NO-GAP.
ENDDO.

Hier werden die acht Bits des einstelligen Hexadezimalfelds HEX vom Wert 'B5' ausgelesen und wie folgt ausgegeben:

10110101