二进制转换为十进制 - understaing

问题描述:

我需要二进制转换为十进制的逻辑,我在这里发现这个代码,它的工作完美:二进制转换为十进制 - 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.这样做有帮助吗? ......所有这些都可以做得更加优雅! –

让我解释一下,通过采取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 

这不是一个数学问题的编程问题。

尝试一个例子: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)使用相同的原理来评估某些给定点处的多项式。 –