2017-01-09 217 views
0

我需要二進制轉換爲十進制的邏輯,我在這裏發現這個代碼,它的工作完美:二進制轉換爲十進制 - understaing

binary_Op1 = raw_input('enter a number: ') 
decimal = 0 
for digit in binary_Op1: 
    decimal = decimal*2 + int(digit) 
print decimal 

的事情是,我有一些困難的理解背後的邏輯它... 爲什麼我們將小數變量乘以2?爲什麼十進制變量設置爲= 0? 每次我們爲什麼要輸入數字?等(:

謝謝

+2

如果輸入是十進制的(即以10爲底數),那麼乘法就是10.這樣做有幫助嗎? ......所有這些都可以做得更加優雅! –

回答

2

讓我解釋一下,通過採取10101作爲一個例子輸入

1 should be multiplied by 2^4 
0 should be multiplied by 2^3 
1 should be multiplied by 2^2 
0 should be multiplied by 2^1 
1 should be multiplied by 2^0 
and Add everything. 

計劃通過每次遇到了一些時間乘以2開始所以基本上第一。 1將被乘以4倍和第一0 3次和同樣直到最後1.

這樣的事情。

1 *2 *2 *2 *2 
0 *2 *2 *2 
1 *2 *2 
0 *2 
1 
1

這不是一個數學問題的編程問題。

嘗試一個例子:1100101

decimal = 0 

# First digit: 1 
decimal = decimal*2 + int(digit) # decimal = 0*2 + 1 = 1 

# Second digit: 1 
decimal = decimal*2 + int(digit) # decimal = 1*2 + 1 = 3 

# Third digit: 0 
decimal = decimal*2 + int(digit) # decimal = 3*2 + 0 = 6 

# Fourth digit: 0 
decimal = decimal*2 + int(digit) # decimal = 6*2 + 0 = 12 

# Fifth digit: 1 
decimal = decimal*2 + int(digit) # decimal = 12*2 + 1 = 25 

# Sixth digit: 0 
decimal = decimal*2 + int(digit) # decimal = 25*2 + 0 = 50 

# Seventh digit: 1 
decimal = decimal*2 + int(digit) # decimal = 50*2 + 1 = 101 

瞧!答案是101.

它的工作原理是將每個1的倍數與數字一樣多。 這樣價值較高的數字實際上得到一個較高的值(1,2,4,8,16,32 ......)

本工程爲十進制系統,以及:

嘗試:1337

decimal = 0 

# First digit: 1 
decimal = decimal*10 + digit # decimal = 0*10 + 1 = 1 

# Second digit: 3 
decimal = decimal*10 + digit # decimal = 1*10 + 3 = 13 

# Third digit: 3 
decimal = decimal*10 + digit # decimal = 13*10 + 3 = 133 

# Fourth digit: 7 
decimal = decimal*10 + digit # decimal = 133*10 + 7 = 1337 

Voilá!答案是1337.

附錄: Horner's Method使用相同的原理來評估某些給定點處的多項式。

+0

附錄:[霍納方法](https://en.wikipedia.org/wiki/Horner%27s_method)使用相同的原理來評估某些給定點處的多項式。 –