ビット文字列とは、2 進数 (ビット) のシーケンスです。シーケンス内のビットの数のことを値の長さと呼びます。
長さゼロのビット文字列は null 文字列と呼ばれます。
ビット文字列変数またはビット文字列値を使用する関数は、次の属性を使用して宣言します。
BIT(n)
または
BIT(n) ALIGNED | UNALIGNED
n は、変数で保持できる、または関数から返すことができるすべての文字列値の最大の長さです。
ビット文字列変数は、n ビット未満の値が代入されると、長さが n ビットになるように右側にゼロ ビットを付加して拡張されます。n ビットを上回る値が代入されると、左側の n ビットのみが格納され、残りのビットは切り捨てられます。
ALIGNED 属性を指定すると、関連付けられたビット文字列変数が記憶域境界に合わせて整列されるため (『Open PL/I ユーザー ガイド』を参照)、アクセスがより効率的になります。この属性により、変数が n ビットよりも大きい領域を使用する場合もありますが、変数に保存できる値のサイズは増加しません。
UNALIGNED 属性を指定すると、関連付けられたビット文字列変数が次に使用可能なビットに整列されるため、必要な記憶域が削減されます。ALIGNED、UNALIGNED のいずれも指定されていない場合は、デフォルトで UNALIGNED と想定されます。
次のような構造体宣言があったとします。
DECLARE 1 S ALIGNED, 2 A BIT(3), 2 B BIT(7) UNALIGNED, 2 C BIT(1) UNALIGNED; 2 D BIT(5);
この場合、ビット文字列は次のように格納されます。
この例では、文字列 A および D が整列されます。これらは構造体宣言から ALIGNED 属性を継承するからです。この場合、ビット文字列は 1 バイト全体を占有します。構造体 S が UNALIGNED 属性で宣言されていた場合、文字列 A および D は整列されません。
ビット文字列の値は、左から右に向かって一度に 1 ビットずつ比較され、等しくない組み合わせが見つかるまで続きます。長さが短い方の作用対象は、比較のために、もう一方の作用対象と同じ長さになるように右側にゼロ ビットを付加することで実質的に拡張されます。
ビット文字列は、コンピューターの記憶域の語ではなく、算術値でもありません。文字列と同じように常に左から右へ操作されるビットのシーケンスです。
ビット文字列定数は、引用符で囲まれた 0 および 1 の文字列の末尾に B を付けたものとして記述されます。
長さが 1 のビット文字列はブール値で、有効な値は '0'B および '1'B です。それぞれ偽および真を表します。
例:
'1'B '10110'B 'O'B ''B
上の例の最後の文字列は null のビット文字列です。
ビット文字列定数は、ビット文字列を表す文字列を使用して記述することもできます。
'character string'Bn
n は 1、2、3、または 4 で、各文字が表すビット数です。次の表に、使用できる文字、および対応するビット文字列値を示します。この表では、「–」は「無効」を表します。
次に例を示します。