二进制转换为十进制 - 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? 每次我们为什么要输入数字?等(:
谢谢
答
让我解释一下,通过采取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)使用相同的原理来评估某些给定点处的多项式。 –
如果输入是十进制的(即以10为底数),那么乘法就是10.这样做有帮助吗? ......所有这些都可以做得更加优雅! –