使用while循环将二进制转换为十进制?

时间:2015-10-21 10:04:58

标签: python while-loop

尝试使用while循环将二进制转换为十进制。我做了这么多,但代码似乎只是添加所有输入的1,即1101011 = 5.任何关于我做错的想法?欢呼声。

编辑:要清楚,我知道我可以使用更简单的方法,但得到答案并不重要,试图专门开发一个while循环算法。

import sys
binary = sys.argv[1]
answer = 0
currentDigit = 0
currentPower = len(binary) - 1

while currentPower >= 0:
   placeHolder = int(binary[currentDigit])
   answer = answer + (placeHolder ** currentPower)
   currentDigit += 1
   currentPower -= 1

print answer

4 个答案:

答案 0 :(得分:1)

第n个地方的1应代表2 n ,而不是1 n

answer = answer + (placeHolder ** currentPower)
                   ^^^^^^^^^^^
               this is 1 in your code

希望你能看到要解决的问题。

答案 1 :(得分:0)

如果在shell中使用二进制文件后缀0b,它将为您提供小数

>>> 0b111
7

int以外的其他方式:

>>> def my_bin_dec(x):
...     return eval("{:s}".format('0b' +x))
... 
>>> my_bin_dec('111')
7
  

注意:eval使用起来不安全,但您可以使用ast.literal_eval

答案 2 :(得分:0)

您需要更改:

answer = answer + (placeHolder ** currentPower)

为:

answer = answer + placeHolder * 2 ** currentPower

或更简洁:

answer += placeHolder * 2 ** currentPower

希望这有帮助。

答案 3 :(得分:0)

这是使用while循环执行此操作的另一种方法。这会对运行值执行左移,如果该位为1:

则再加1
class User {
    private $account;

    public function __construct() {
        $this->account = new Account();
    }

    public function getAccount() {
        return $this->account;
    }
}

使用for循环更简单(也更快):

binary = '11001101101010101'
value = 0
i = 0
while i < len(binary):
    value <<= 1    # Shift left 1 bit position. Same as multiplying by 2.
    value += (binary[i] == '1')
    i += 1

assert value == int(binary, 2)

最后,可以在一行中完成。以代码可读性为代价,这似乎比上面的循环更快:

binary = '11001101101010101'
value = 0
for bit in binary:
    value <<= 1
    value += (bit == '1')

assert value == int(binary, 2)