将二进制转换为十进制整数输出

pur*_*nka 4 python binary integer base-conversion python-2.7

我需要将二进制输入转换为十进制整数.我知道如何从十进制到二进制:

n = int(raw_input('enter a number: '))
print '{0:b}'.format(n)
Run Code Online (Sandbox Code Playgroud)

我需要朝相反的方向前进.我的教授说,当他检查我们的代码时,他会输入11001,他应该25回来.我查看了我们的笔记,我无法弄清楚如何做到这一点.谷歌和其他互联网资源也没有太大帮助.

最大的问题是我们不允许使用内置函数.我理解为什么我们不被允许使用它们,但它使这个问题变得更加困难,因为我知道Python有一个二进制到十进制的内置函数.

ceg*_*ash 19

二进制转十进制

int(binaryString, 2)
Run Code Online (Sandbox Code Playgroud)

十进制转二进制

format(decimal ,"b")
Run Code Online (Sandbox Code Playgroud)

  • Python 有 [bin()](https://docs.python.org/3/library/functions.html#bin) 函数将十进制字符串转换为二进制字符串。`bin(26) => # '0b11010'` 在 Python 2.6 中引入。 (5认同)

iCo*_*dez 18

您可以使用int并设置基数2(对于二进制):

>>> binary = raw_input('enter a number: ')
enter a number: 11001
>>> int(binary, 2)
25
>>>
Run Code Online (Sandbox Code Playgroud)

但是,如果您不能那样使用int,那么您可以随时执行此操作:

binary = raw_input('enter a number: ')
decimal = 0
for digit in binary:
    decimal = decimal*2 + int(digit)
print decimal
Run Code Online (Sandbox Code Playgroud)

以下是演示:

>>> binary = raw_input('enter a number: ')
enter a number: 11001
>>> decimal = 0
>>> for digit in binary:
...     decimal = decimal*2 + int(digit)
...
>>> print decimal
25
>>>
Run Code Online (Sandbox Code Playgroud)


Anv*_*kov 12

基于人工智能(线性回归)模型,实际上有一种更快的替代方法可以将二进制数转换为十进制数:

  1. 训练 AI 算法将 32 位二进制数转换为基于十进制数。
  2. 从 32 二进制预测十进制表示。

请参阅下面的示例和时间比较:

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import numpy as np

y = np.random.randint(0, 2**32, size=10_000)

def gen_x(y):
    _x = bin(y)[2:]
    n = 32 - len(_x)
    return [int(sym) for sym in '0'*n + _x]

X = np.array([gen_x(x) for x in y])

model = LinearRegression()
model.fit(X, y)

def convert_bin_to_dec_ai(array):
    return model.predict(array)

y_pred = convert_bin_to_dec_ai(X)
Run Code Online (Sandbox Code Playgroud)

时间对比:

在此处输入图片说明

这种 AI 解决方案转换数字的速度几乎是传统方式的 10 倍!

  • 你有没有想过 numpy 数组比 python 列表快得多? (5认同)
  • 当我尝试在技术面试中使用此功能时,面试官面临的问题 (4认同)