Bitwise operations in Python?
John Machin
sjmachin at lexicon.net
Thu Aug 18 20:02:55 EDT 2005
Carl wrote:
> Dear friends,
>
> I am currently porting a fortran program to Python but am stuck on the
> intrinsic IBITS function.
>
> Does anyone know about a replacement function for IBITS in Python?
>
> Yours, Carl
>
> IBITS(I, POS, LEN)
>
> Extracts a sequence of bits.
>
> I
> must be of type integer.
>
> POS
> must be of type integer. It must be nonnegative and POS + LEN must be
> less than or equal to BIT_SIZE (I).
>
> LEN
> must be of type integer and nonnegative.
>
> Class
>
> Elemental function
>
> Result Type and Attributes
>
> Same as I.
>
> Result Value
>
> The result has the value of the sequence of LEN bits in I beginning at bit
> POS, right-adjusted and with all other bits zero.
>
> The bits are numbered from 0 to BIT_SIZE(I)-1, from right to left.
>
> Examples
>
> IBITS (14, 1, 3) has the value 7.
>
No, don't know, but you could write one yourself PDQ. Something like this:
def ibits(arg, pos, len):
return (arg >> pos) & ((1 << len) - 1)
if __name__ == "__main__":
def testit(arg, pos, len, reqd):
result = ibits(arg, pos, len)
print arg, pos, len, reqd, result, "* "[result == reqd]
testit(14, 1, 3, 7)
for pos in range(6):
testit(4095, pos, 3, 7)
for pos in range(6):
testit(-1, pos, 3, 7)
for pos in range(6):
testit(0, pos, 3, 0)
for pos in range(0, 32, 4):
testit(0x12345678, pos, 4, 8-pos/4)
for pos in range(0, 32, 4):
testit(0x87654321, pos, 4, 1+pos/4)
More information about the Python-list
mailing list