COBOL 環境でのプログラミングでは、文字、フィールド、レコード、およびファイルで構成されたデータを処理します。ビット単位でのデータ操作も必要になります。例えば、ビット操作は、次の処理を行うアプリケーションで重要な機能です。
ビット操作を行うためのライブラリ ルーチン セットがあります。これらのライブラリ ルーチンは次のとおりです。
CBL_NOT | 論理否定 |
CBL_AND | 論理積 |
CBL_OR | 論理和 |
CBL_EQ | 論理等価 |
CBL_XOR | 排他的論理和 |
CBL_IMP | 論理包含 |
これらの論理演算の演算結果を次の真偽表に示します。
A | 0 | 0 | 1 | 1 | |
---|---|---|---|---|---|
CBL_NOT | (A の論理否定) | 1 | 1 | 0 | 0 |
A | 0 | 0 | 1 | 1 | |
---|---|---|---|---|---|
B | 0 | 1 | 0 | 1 | |
CBL_AND | (A と B の論理積) | 0 | 0 | 0 | 1 |
CBL_OR | (A と B の論理和) | 0 | 1 | 1 | 1 |
CBL_EQ | (A と B の論理等価) | 1 | 0 | 0 | 1 |
CBL_XOR | (A と B の排他的論理和) | 0 | 1 | 1 | 0 |
CBL_IMP | (A と B の論理包含) | 1 | 1 | 0 | 1 |
例えば、CBL_EQ ルーチンがビット A と B を比較する際に、A と B の両方が 0 の場合、または A と B の両方が 1 の場合は、ビットが 1 に設定されます。そうでない場合は、ビットが 0 に設定されます。
PICTURE 文字 1 を使用してデータ項目をブール値として定義し、ブール演算子 B-AND、B-OR、B-XOR、および B-NOT を使用して「論理積」、「論理和」、「排他的論理和」、および「否定」演算を実行することもできます。これらの演算子はブール式で使用されます。次に例を示します。
01 My-flag PIC 1111 USAGE BIT VALUE B"0000". 01 My-flag-2 PIC 1111 USAGE BIT. ... MOVE B"0011" to My-flag-2 *> Initialize My-flag-2 ... COMPUTE My-flag = B-NOT My-flag-2 *> set the bits in My-flag to the *> reverse of My-flag-2, 1100. ... COMPUTE My-flag = My-flag B-AND B"0000" *> turn off all the bits in My-flag. ... COMPUTE My-flag-2 = My-flag-2 B-OR B"1000" *> set bit 1 ON in My-flag-2, keeping *> other bits unchanged.
ブール項目は次の 2 通りの方法でテストできます。
01 Single-bit-item pic 1 usage bit. 01 Multiple-bit-item pic 1(7) usage bit. ... IF Single-bit-item THEN CALL a-program *> calls if Single-bit-item is true (1)
IF My-flag-2 EQUAL B"1000" THEN CALL a-program
ブール項目を整数に変換するには INTEGER-OF-BOOLEAN 組み込み関数を使用し、整数項目をブール値に変換するには BOOLEAN-OF-INTEGER 組み込み関数を使用します。次に例を示します。
01 bit-item PIC 1(6) usage BIT. 01 integer-item PIC 9(5) VALUE 544. *> 1000100000 in binary 01 integer-item-2 PIC 9(3). ... MOVE FUNCTION BOOLEAN-OF-INTEGER ( integer-item , 6) TO bit-item. *> the function returns the low order 6 bits of the binary representation of the *> integer value, and MOVE stores it in bit-item, padding on the right with 0’s ... COMPUTE integer-item-2 = FUNCTION INTEGER-OF-BOOLEAN (bit-item). *> the function returns the numeric value of the leading 6 bits (100000 in binary), 32, and *> COMPUTE puts 032 in integer-item-2