定義は次のとおりです。
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
|