Sun Studio 12: Fortran ライブラリ・リファレンス

1.4.4 bit: ビット関数: andorbit setbit

定義は次のとおりです。

and( word1, word2 )

引数のビット単位の論理積を計算する

or( word1, word2 )

引数のビット単位の論理和を計算する

xor( word1, word2 )

引数のビット単位の排他的論理和を計算する

not( word )

引数のビット単位の補数を戻す

lshift( word, nbits )

循環桁上げなしで左へ論理シフトする

rshift( word, nbits )

符号拡張を行い右へ算術シフトする

call bis( bitnum, word )

word の第 bitnum ビットを 1 に設定する。

call bic( bitnum, word )

word の第 bitnum ビットを 0 にクリアする。

bit( bitnum, word )

word の第 bitnum ビットを検査し、ビットが 1 であれば .true. を返し、ビットが 0 であれば .false. を戻す。

call setbit(bitnum,word,state)

state がゼロ以外であれば word の第 bitnum ビットを 1 に設定し、state がゼロであれば 0 にクリアする

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 )

ビットのテスト: mi 番目のビットをテストする。ビットが 1 のときは LOGICAL .true. を返し、ビットが 0 のときは .false. を戻す。

ビットフィールドを操作するその他の関数については、「1.4.36 mvbits: ビットフィールドの移動」、および第 2 章と 3 章を参照してください。

1.4.4.1 andor xornotrshift lshift の使用法

組み込み関数の場合は、次のように使います。

x = and( word1, word2 )

x = or( word1, word2 )

x = xor( word1, word2 )

x = not( word )

x = rshift( word, nbits )

x = lshift( word, nbits )

wordword1word2nbits は、整数型の入力引数です。これらは組み込み関数で、コンパイラによりインライン展開されます。戻されるデータの型は、第 1 引数のデータ型です。

nbits の値が正当かどうかの検査は行われません。

例: andorxornot:


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%

例: lshiftrshift:


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%

1.4.4.2 bicbis bitsetbit の使用法

サブルーチンと関数については、次を参照してください。

call bic( bitnum, word )

call bis( bitnum, word )

call setbit( bitnum, word, state )

LOGICAL bit

x = bit( bitnum, word )

bitnumstate および word は、INTEGER*4 型の入力引数です。bit() 関数では、論理値が返されます。

ビットは、ビット 0 が最下位ビット、ビット 31 が最上位ビットになるように番号が付けられます。

bicbis、および setbit は外部サブルーチン、bit は外部関数です。

例 3: bicbissetbitbit:


        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