【问题标题】:Binary to Decimal (mathematics way)二进制转十进制(数学方式)
【发布时间】:2013-01-15 20:04:29
【问题描述】:

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

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

例如: 二进制:10011100

第一个数字是 1:2**7
第四个数字是 1: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'的所有索引?

【问题讨论】:

    标签: python binary decimal


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 不应该是my_str[::-1],即不应该以相反的顺序迭代吗?
    • @stephan:好吧,OP 已经做到了my_str = my_str[::-1] .. 但没有那个你是对的。
    【解决方案2】:

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

    int(x[, base]) -> integer
    

    In [1]: my_str = '10011100'
    
    In [2]: int(my_str,2)
    Out[2]: 156
    

    【讨论】:

    • 它工作。但是,这不是解决这个问题的数学方法。
    • @user2011210 -- 我同意,但我认为它可能对其他人有用,他们将来可能会偶然发现这个问题......
    【解决方案3】:

    二进制数: 如果您正在考虑为什么二进制数总是以 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]

    【讨论】:

      猜你喜欢
      • 2014-10-30
      • 2012-10-26
      • 2014-01-07
      • 2012-04-08
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多