将二进制转换为十进制 - 理解逻辑

时间:2017-01-09 11:08:21

标签: python python-2.7 python-3.x binary

我需要将二进制转换为十进制,我在这里找到了这个代码,它的工作完美:

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

问题是,我对它背后的逻辑有一些难以理解...... 为什么我们将十进制变量乘以2?为什么十进制变量设置为= 0? 为什么我们每次都要数字?等等(:

谢谢。

2 个答案:

答案 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使用相同的原理来评估某个给定点的多项式。