定义如下:
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 章。
对于内函数:
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 都是整型输入参数。这些函数是编译器内联扩展的内函数。返回值的数据类型是第一个参数的数据类型。
不测试 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(’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 |