从十进制转换为二进制而不使用bin()不打印

时间:2018-10-12 05:47:16

标签: python function binary decimal

我试图制作一种算法,该算法可以打印数字的二进制值,但是由于某种原因,它会退出而不是打印。

exponent = 4
binary = ""
def decToBin(userInput):
    global exponent, binary
    while (2**exponent) == 0:
        if (2**exponent) <= userInput:
            userInput = userInput - (2**exponent)
            binary = binary + "1"
        else:
            binary = binary + "0"
        exponent = exponent - 1
    return binary
print(decToBin(16))

2 个答案:

答案 0 :(得分:0)

您需要将while (2**exponent) == 0更改为while exponent >= 0,否则就不会进入while循环的内部或外部,因为2**exponent总是> 0,尽管每次迭代都减少exponent 。另外,不需要global exponent, binary;只需将它们放在函数中即可。

请注意,选择exponent = 4时,userInput的范围应限制为[0,2 **(指数+ 1)-1] = [0,31]。

这是另一种算法(假设userInput是正整数):

def decToBin(userInput):
    if userInput == 0:
        return '0'
    binary = ''   
    while userInput > 0:
        binary = str(userInput % 2) + binary
        userInput //= 2
    return binary

答案 1 :(得分:-1)

为什么要做什么?

userInput为16和exponent4的开头。 2**4 == 1616是!= 0,因此您的while 2**exponent == 0永远不会触发,也永远不会进入其阻止...

您需要

while exponent > 0: 

获得结果。您正在减少每个循环的指数,因此一旦它越过0变成负数,就可以完成-不会一次使2 **指数变大。