Python-将二进制转换为十进制

时间:2016-04-20 11:32:48

标签: python binary decimal

我正在做一个colledge赋值,让我们创建一个python程序,将二进制转换为十进制而不使用bin()函数或list()。我计划将每个1和0存储在一个函数中,该函数将在以后相乘。但是,我不确定我该怎么做呢

3 个答案:

答案 0 :(得分:3)

好吧,您可以将二进制数作为字符串传递,并以相反的顺序迭代它,将每个0或1乘以2 ^ n,其中n是在每个循环周期递增的数字。

def bin2dec(b):
    number = 0
    counter = 0
    for i in b[::-1]: # Iterating through b in reverse order
        number += int(i)*(2**counter)
        counter += 1

    return number

bin2dec("101010") # 42

编辑:像Byte Commander一样,你也可以在循环中使用枚举而不是manuel计数器,它可以达到同样的目的。

def bin2dec(b):
    number = 0
    for idx, num in enumerate(b[::-1]): # Iterating through b in reverse order
        number += int(num)*(2**idx)

    return number

答案 1 :(得分:0)

使用列表理解的简单单行:

decimal = sum(int(bit) * 2**rank for rank, bit in enumerate(reversed(binary)))

答案 2 :(得分:0)

无需反转位串或使用索引。您可以使用按位运算符进行此简单转换。

这是一些Python 2 / Python 3代码:

from __future__ import print_function

def bin_to_dec(bits):
    n = 0
    for b in bits:
        n = (n << 1) | (b == '1')
    return n

# Test

for i in range(16):
    bits = format(i, 'b')
    n = bin_to_dec(bits)
    print('{0:2}: {1:>4} {2:2}'.format(i, bits, n))

<强>输出

 0:    0  0
 1:    1  1
 2:   10  2
 3:   11  3
 4:  100  4
 5:  101  5
 6:  110  6
 7:  111  7
 8: 1000  8
 9: 1001  9
10: 1010 10
11: 1011 11
12: 1100 12
13: 1101 13
14: 1110 14
15: 1111 15

这是有效的,因为False的算术值为零,而True的算术值为1,因此在算术表达式中(b == '1')的行为类似于b等于'1',否则为0。

如果您不习惯使用<<左移位和|按位OR运算符,则可以使用乘法和加法。只需更换

n = (n << 1) | (b == '1')

n = (n * 2) + (b == '1')