Bitwise operations in Python?

C

Carl

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.
 
P

Paul Rubin

Carl said:
IBITS(I, POS, LEN)
Extracts a sequence of bits.
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.
return (i >> pos) & ~(-1 << len)
7
 
J

John Machin

Carl said:
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)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,014
Latest member
BiancaFix3

Latest Threads

Top