在二进制数中的位之间进行迭代

Raf*_*ael 3 python python-3.x

如何在python 3中给定一个特定的二进制数来迭代和计算每个位的值?

例如:

00010011 
--------------------
bit position | value
--------------------
[0]            false (0)
[1]            false (0)
[2]            false (0)
[3]            true  (1)
[4]            false (0)
[5]            false (0)
[6]            true  (1)
[7]            true  (1)
Run Code Online (Sandbox Code Playgroud)

geo*_*org 8

使用时,最好使用按位运算符:

number = 19

num_bits = 8
bits = [(number >> bit) & 1 for bit in range(num_bits - 1, -1, -1)]
Run Code Online (Sandbox Code Playgroud)

这会给你一个8个数字的列表:[0, 0, 0, 1, 0, 0, 1, 1].迭代它并打印所需的任何东西:

for position, bit in enumerate(bits):
    print '%d  %5r (%d)' % (position, bool(bit), bit)
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 5

Python字符串是序列,因此您可以像使用列表一样循环遍历它们.添加enumerate(),你自己也有一个索引:

for i, digit in enumerate(binary_number_string):
    print '[{}] {:>10} ({})'.format(i, digit == '1', digit)
Run Code Online (Sandbox Code Playgroud)

演示:

>>> binary_number_string = format(19, '08b')
>>> binary_number_string
'00010011'
>>> for i, digit in enumerate(binary_number_string):
...     print '[{}] {:>10} ({})'.format(i, digit == '1', digit)
... 
[0]      False (0)
[1]      False (0)
[2]      False (0)
[3]       True (1)
[4]      False (0)
[5]      False (0)
[6]       True (1)
[7]       True (1)
Run Code Online (Sandbox Code Playgroud)

我使用format()而不是在bin()这里,因为你不必0b在开始时处理,你可以更容易地包括领先0.