1

如果有二进制数:10011100 十进制是156。

我想用数学方法将二进制转十进制。

例如:二进制:10011100

第一个数字是 1: 第四个数字是 1 2**7
2**4
第五个数字是 1: 2**3
第六个数字是 1: 2**2

然后2**7+2**4+2**3+2**2 = 156

我想,我需要使用 string.find() 方法。

>>> my_str = '10011100'   
>>> my_str = my_str[::-1]   
>>> print(my_str)   
00111001   
>>> my_str.find('1')   
2   
>>>  

我只能找到第一个'1'。

如何找到'1'的所有索引?

4

3 回答 3

7

为什么要检索索引?您可以像这样简单地迭代这些位:

num = sum(2**i for i, bit in enumerate(my_str) if bit == '1')

无论如何,如果您喜欢两个单独的步骤,您可以获得这样的索引:

indexes = [i for i, bit in enumerate(my_str) if bit == '1']
num = sum(2**i for i in indexes)
于 2013-01-31T16:32:13.427 回答
1

您还可以检查采用基本参数的内置int()函数:

int(x[, base]) -> integer

In [1]: my_str = '10011100'

In [2]: int(my_str,2)
Out[2]: 156
于 2013-01-31T16:47:11.107 回答
0

二进制数: 如果您正在考虑为什么二进制数总是以 2 为底,答案是二进制数以 2 为底,因为它只使用两个符号:通常是“0”(零)和“1”(一) . 例如 10011100(仅使用“零”和“一”)


如果有二进制数:10011100 十进制是156。这里的二进制数是 10011100 它总是有一个基数 2 即使它没有写10011100 10011100 基数 2相同

将二进制转换为十进制

  • 我们从最右边的数字开始向左移动

    • 将二进制数乘以 2 为底数,幂 (^) 不断增加 1

      (0*2^0)+(0*2^1)+(1*2^2)+(1*2^3)+(1*2^4)+(0*2^5)+(0 *2^6)+(1*2^7)

      =156


如果您想更清楚地理解这里是一个链接 [ https://www.mathwarehouse.com/non-decimal-bases/convert-binary-to-decimal.php?ref=driverlayer.com][1]

于 2019-07-12T14:47:16.567 回答