2017-08-17 185 views
0

我使用以下函數將int數轉換爲二進制。同時添加額外的零(16位)。但結果出現在二進制字符串中,當我在「按位向左移位和按位與運算符」的if語句中使用它時,會給我造成問題。Python將二進制字符串轉換爲二進制int

def binary(num, length=16): 
      return format(num, '#0{}b'.format(length + 2)) 

在上下文中使用的功能:

if (binary(1024) & (1<<2)): 
    print "Bit 2 is SET" 

但收到以下錯誤信息:

Traceback (most recent call last): 
    File "log.py", line 209, in <module> 
    if (binary(1024) & (1<<2)): 
TypeError: unsupported operand type(s) for &: 'str' and 'int' 

簡單地解釋說:

"0b0000010000000000" to be: 0b0000010000000000 

是否有任何簡單的解決方案這個?

+2

你的意思是 - 'INT(binary_string,2)'(傳入基地)? –

+3

嘗試'if(1024&(1 << 2)):',你的二進制方法是無用的。口罩與整數工作正常。整數_are_二進制畢竟... –

+0

爲什麼即使顯式轉換爲二進制,如果你只是使用按位'&'反正呢?無論輸入格式如何,它始終在二進制位級別上工作。 – Zinki

回答

0

當您在一個數字上使用任何按位運算符時,它會自動應用它,因爲我們通常會將正在執行的操作視覺化爲二進制值。

對於你的情況,你可以簡單地將字符串轉換爲整數,然後如果你想要,你也可以使用bin()函數獲得相同數字的二進制表示,該函數返回二進制表示中的字符串。

下面是代碼: -

numstring = "15" 

num_in_base_10 = int(numstring) 
string_in_binary_form = bin(num_in_base10) 

#If you dont want the 0b prefix of the binary repr , you can simple do , 

string_in_binary_form.replace('0b','') which would return the string without 0b prefix. 
相關問題