实现n字节整数的按位运算的最佳方法

时间:2013-03-12 13:53:59

标签: fortran bit-manipulation bitwise-operators

我想为大整数上的按位运算实现一个高效的库。我编写了以下覆盖BTEST的函数:

FUNCTION testb_i2b(n,i)
  INTEGER(I8B), DIMENSION(0:), INTENT(IN) :: n
  INTEGER(I2B), INTENT(IN) :: i
  INTEGER(I2B) :: j
  LOGICAL :: testb_i2b
  j = ISHFT(i,-6)
  IF ( j .LE. UBOUND(n,1) ) THEN
    testb_i2b = BTEST(n(j),i-ISHFT(j,6))
  ELSE
    testb_i2b = .FALSE.
  END IF
END FUNCTION testb_i2b

数组n包含我的大整数的64*(SIZE(n)-1)位。有没有更有效的方法来获得相同的功能?

1 个答案:

答案 0 :(得分:3)

我不知道这是否比你的版本更快,我会让你去测试,但它涉及的操作更少,而且没有明确的if语句。它给出了与我运行的少数测试的代码相同的结果。我已经用64位硬连接了bignum中整数的大小,你可以根据需要设置一个参数。

  LOGICAL FUNCTION btest_bignum(bn,ix)
    IMPLICIT NONE
    INTEGER(int64), DIMENSION(0:), INTENT(in) :: bn
    INTEGER(int16), INTENT(in) :: ix
    INTEGER :: array_ix
    array_ix = ix/64
    btest_bignum = BTEST(bn(array_ix), ix-(array_ix*64))
  END FUNCTION btest_bignum

请注意,我使用了现在标准的声明int64int16