如何将int n
转换为二进制并测试结果二进制数的每一位?
经过大量的谷歌搜索后,我得到了以下内容:
def check_bit_positions(n, p1, p2):
print int(str(n),2)
但是我收到错误invalid literal for int() with base 2
。让我知道如何获得输入数字的二进制形式并测试位置p1
和p2
编辑:
binary = '{0:b}'.format(n)
if list(binary)[p1] == list(binary)[p2]:
print "true"
else:
print "false"
上面的代码现在可以使用,但是如何从列表末尾检查位置p1和p2?
答案 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
。因此,您可以使用num
和p1
在p2
上调用此函数并比较结果。
编辑:从数字的末尾(最低有效位)开始,这将是p1
和p2
,而不是开头。
答案 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'