在python中将整数转换为二进制并比较这些位

时间:2013-08-07 18:52:06

标签: python

如何将int n转换为二进制并测试结果二进制数的每一位?

经过大量的谷歌搜索后,我得到了以下内容:

def check_bit_positions(n, p1, p2):
    print int(str(n),2)

但是我收到错误invalid literal for int() with base 2。让我知道如何获得输入数字的二进制形式并测试位置p1p2

的每个位

编辑:

binary = '{0:b}'.format(n)
if list(binary)[p1] == list(binary)[p2]:
     print "true"
 else:
     print "false"

上面的代码现在可以使用,但是如何从列表末尾检查位置p1和p2?

3 个答案:

答案 0 :(得分:5)

使用bin()功能:

>>> bin(5)
'0b101'

str.format

>>> '{0:04b}'.format(5)
'0101'

答案 1 :(得分:4)

这是我写的一个快速函数,用于检查数字的第n位:

def check_nth_bit(num, n):
    return (num>>n)&1

基本上,您将数字n向右移位,这会将nth数字放在最右边的位置,并将新数字按位1(除了在最右边的位置,它都是0,你可以检查该位是1还是0。因此,您可以使用nump1p2上调用此函数并比较结果。

编辑:从数字的末尾(最低有效位)开始,这将是p1p2,而不是开头。

答案 2 :(得分:3)

您可以使用format

>>> format(10, 'b')
'1010'

int用于将数字从任何基数转换为基数10,并且您尝试使用它将整数转换为二进制,这是错误的。

>>> int('1010', 2)
10
>>> int('20', 2)
Traceback (most recent call last):
  File "<ipython-input-3-05fc7296a37e>", line 1, in <module>
    int('20', 2)
ValueError: invalid literal for int() with base 2: '20'