读取python 2.6中的单位操作

读取python 2.6中的单位操作,python,binary,bit-manipulation,Python,Binary,Bit Manipulation,我试图读取二进制字符串中的一个位,但似乎无法使其正常工作。我读入一个值,然后转换成32b字符串。从那里我需要读取字符串中的特定位,但它并不总是相同的。getBin函数返回前导为0的32位字符串。我的代码总是返回1,即使位是0。代码示例: slot=195035377 getBin = lambda x, n: x >= 0 and str(bin(x))[2:].zfill(n) or "-" + str(bin(x))[3:].zfill(n) bits = getBin(slot,32

我试图读取二进制字符串中的一个位,但似乎无法使其正常工作。我读入一个值,然后转换成32b字符串。从那里我需要读取字符串中的特定位,但它并不总是相同的。getBin函数返回前导为0的32位字符串。我的代码总是返回1,即使位是0。代码示例:

slot=195035377
getBin = lambda x, n: x >= 0 and str(bin(x))[2:].zfill(n) or "-" + str(bin(x))[3:].zfill(n)
bits = getBin(slot,32)
bit = (bits and (1 * (2 ** y)) != 0)
print("bit: %i\n"%(bit))
在本例中,
bits=00001011010000000000011110011


如果我在寻找位3,它
I
s为0,则位将等于1。有什么想法吗?

您可以使用切片来获得正确的数字

bits = getBin(slot, 32)
bit = bits[bit_location-1:bit_location] #Assumes zero based values

print("bit: %i\n"%(bit))

你应该怎么做。。。不要使用字符串

要测试整数值中的特定位,请使用
按位操作数;无需将其转换为二进制字符串

if slot & (1 << 3):
    print 'bit 3 is set'
else:
    print 'bit 3 is not set'
要使其适用于任何位位置,请减去1:

if slot & (1 << (bitpos - 1)):
    print 'bit {} is set'.format(bitpos)
您的二进制格式代码过于冗长。只需使用
format()
函数创建二进制字符串表示:

format(slot, '032b')

将二进制值格式化为0填充的32个字符的二进制字符串。

您希望使用
格式化(插槽'032b')
来格式化二进制数。您希望移位两次,而不是三次。
if slot & (1 << 3):
    print 'bit 3 is set'
else:
    print 'bit 3 is not set'
if (slot >> (bitpos - 1)) & 1:
format(slot, '032b')