Sun Studio 12:Fortran 库参考

1.4.4 bit:位函数 andor、…、bitsetbit、…

定义如下:

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,则返回 LOGICAL .true.,如果该位是 0,则返回 .false.

call setbit(bitnum,word,state)

如果 state 是非零值,则将 word 中的 bitnum 位设置为 1,否则将其清除。

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 )

提取位:从 m 中的 i 位开始提取 len 个位。

ibset( m, i )

设置位:返回值等于字 m,且位数 i 设置为 1。

ibclr( m, i )

清除位:返回值等于字 m,且位数 i 设置为 0。

btest( m, i )

测试 m 中的 i 位;如果该位是 1,则返回 LOGICAL .true.,如果该位是 0,则返回 .false.

有关对位字段进行操作的其他函数,另请参见1.4.36 mvbits:移动位字段以及第 2 章和第 3 章。

1.4.4.1 用法:andorxornotrshiftlshift

对于内函数:

x = and( word1, word2 )

x = or( word1, word2 )

x = xor( word1, word2 )

x = not( word )

x = rshift( word, nbits )

x = lshift( word, nbits )

wordword1word2nbits 都是整型输入参数。这些函数是编译器内联扩展的内函数。返回值的数据类型是第一个参数的数据类型。

不测试 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 用法:bicbisbitsetbit

对于子例程和函数

call bic( bitnum, word )

call bis( bitnum, word )

call setbit( bitnum, word, state )

LOGICAL bit

x = bit( bitnum, word )

bitnumstateword 都是 INTEGER*4 输入参数。函数 bit() 的返回值是逻辑值。

各个位都进行编号,0 位表示最低有效位,31 位表示最高有效位。

bicbissetbit 是外部子例程,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(’after bic(2,word)’, o12.11)
        call bis( bitnum, word )
        print 3, word
 3      format(’after bis(2,word)’, o12.11)
        call setbit( bitnum, word, state )
        print 4, word
 4      format(’after setbit(2,word,0)’, o12.11)
        print 5, bit(bitnum, word)
 5      format(’bit(2,word)’, L )
        end
<output>
             word 00000000007
after bic(2,word) 00000000003
after bis(2,word) 00000000007
after setbit(2,word,0) 00000000003
bit(2,word) F