2013-01-31 30 views
1

如果有一個二進制數:10011100 它是十進制的156。二進制到十進制(數學方式)

我想用數學方法把二進制變成十進制。

例如: 二進制:10011100

所述第一數目爲1:2**7
第四數爲1:2**4
第五數爲1:2**3
第六數爲1:2**2

然後2**7+2**4+2**3+2**2 = 156

我想,我需要你se string.find()方法。

>>> my_str = '10011100' 
>>> my_str = my_str[::-1] 
>>> print(my_str) 
00111001 
>>> my_str.find('1') 
2 
>>> 

我只能找到第一個'1'。

如何查找'1'的所有索引?

回答

6

爲什麼要檢索索引?你可以簡單地遍歷位是這樣的:

num = sum(2**i for i, bit in enumerate(my_str) if bit == '1') 

無論如何,你可以得到的指標這樣,如果你喜歡兩個獨立的步驟:

indexes = [i for i, bit in enumerate(my_str) if bit == '1'] 
num = sum(2**i for i in indexes) 
+1

不應該是'my_str [:: - 1]',即不應該以相反的順序迭代嗎? – stephan

+1

@stephan:那麼OP已經'my_str = my_str [:: - 1]'..但沒有,你是對的。 – ThiefMaster

+0

你是對的,我剛剛解析了'my_str ='10011100''部分... – stephan

1

您還可以檢查內置int()功能採用一個基論點:

int(x[, base]) -> integer 

In [1]: my_str = '10011100' 

In [2]: int(my_str,2) 
Out[2]: 156 
+0

它的工作。但是,解決這個問題並不是一種數學方法。 – Vinceeema

+0

@ user2011210 - 我同意,但我認爲這可能對其他人有用,他們可能會在未來遇到這個問題... – root