定義は次のとおりです。
MIL-STD-1753 の代替外部バージョンは次のとおりです。
iand( m, n ) |
引数のビット単位の論理積を計算する |
ior( m, n ) |
引数のビット単位の論理和を計算する |
ieor( m, n ) |
引数のビット単位の排他的論理和を計算する |
ishft( m, k ) |
循環桁上げなしで論理シフトする (k>0 のときは左、k<0 のときは右へ) |
ishftc( m, k, ic ) |
循環シフト: m の、右から ic ビットを左へ k ビット循環シフトする |
ibits( m, i, len ) |
ビットの切り出し: i ビット目から始まる len ビット分を m から切り出す |
ibset( m, i ) |
ビットをセットする: ビット i が 1 であれば戻り値は m と同じ |
ibclr( m, i ) |
ビットをクリアする: ビット i が 0 であれば戻り値は m と同じ |
btest( m, i ) |
ビットのテスト: m の i 番目のビットをテストする。ビットが 1 のときは LOGICAL .true. を返し、ビットが 0 のときは .false. を戻す。 |
ビットフィールドを操作するその他の関数については、「1.4.36 mvbits: ビットフィールドの移動」、および第 2 章と 3 章を参照してください。
組み込み関数の場合は、次のように使います。
x = and( word1, word2 ) |
x = or( word1, word2 ) |
x = xor( word1, word2 ) |
x = not( word ) |
x = rshift( word, nbits ) |
x = lshift( word, nbits ) |
word、word1、word2、nbits は、整数型の入力引数です。これらは組み込み関数で、コンパイラによりインライン展開されます。戻されるデータの型は、第 1 引数のデータ型です。
nbits の値が正当かどうかの検査は行われません。
例: and、or、xor、not:
demo% cat tandornot.f print 1, and(7,4), or(7,4), xor(7,4), not(4) 1 format(4x 'and(7,4)', 5x 'or(7,4)', 4x 'xor(7,4)', 1 6x 'not(4)'/4o12.11) end demo% f95 tandornot.f demo% a.out and(7,4) or(7,4) xor(7,4) not(4) 00000000004 00000000007 00000000003 37777777773 demo% |
例: lshift、rshift:
demo% cat tlrshift.f integer*4 lshift, rshift print 1, lshift(7,1), rshift(4,1) 1 format(1x 'lshift(7,1)', 1x 'rshift(4,1)'/2o12.11) end demo% f95 tlrshift.f demo% a.out lshift(7,1) rshift(4,1) 00000000016 00000000002 demo% |
サブルーチンと関数については、次を参照してください。
call bic( bitnum, word ) |
call bis( bitnum, word ) |
call setbit( bitnum, word, state ) |
LOGICAL bit x = bit( bitnum, word ) |
bitnum、state、 および word は、INTEGER*4 型の入力引数です。bit() 関数では、論理値が返されます。
ビットは、ビット 0 が最下位ビット、ビット 31 が最上位ビットになるように番号が付けられます。
bic、bis、および setbit は外部サブルーチン、bit は外部関数です。
例 3: bic、bis、setbit、bit:
integer*4 bitnum/2/, state/0/, word/7/ logical bit print 1, word 1 format(13x 'word', o12.11) call bic( bitnum, word ) print 2, word 2 format('bic(2,word) のあと', o12.11) call bis( bitnum, word ) print 3, word 3 format('bis(2,word) のあと', o12.11) call setbit( bitnum, word, state ) print 4, word 4 format('setbit(2,word,0) のあと', o12.11) print 5, bit(bitnum, word) 5 format('bit(2,word)', L ) end <出力> word 00000000007 bic(2,word) のあと 00000000003 bis(2,word) のあと 00000000007 setbit(2,word,0) のあと 00000000003 bit(2,word) F |