我需要将二进制转换为十进制,我在这里找到了这个代码,它的工作完美:
binary_Op1 = raw_input('enter a number: ')
decimal = 0
for digit in binary_Op1:
decimal = decimal*2 + int(digit)
print decimal
问题是,我对它背后的逻辑有一些难以理解...... 为什么我们将十进制变量乘以2?为什么十进制变量设置为= 0? 为什么我们每次都要数字?等等(:
谢谢。
答案 0 :(得分: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 :(得分: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
瞧!答案是1337。
附录: Horner's Method使用相同的原理来评估某个给定点的多项式。