采用表示十进制数的字符串并以二进制格式返回的函数

时间:2015-11-22 22:11:55

标签: python python-2.7

我正在尝试获取一个函数来取一个字符串dec,表示一个十进制数,例如“11”,我希望所述函数返回一个字符串,其中包含相应的二进制格式,在本例中为“1011” 。 所以这就是我到目前为止所做的:

def dec2bin(dec):

    dec = str("11")

    if dec > 1:
        binary(dec//2)
    return (dec % 2,end = "")

我是Python的新手,所以我不知道如何将数字转换为字符串(首先使用str())以及如何使它返回相应的二进制值。有人能指出我正确的方向吗?

5 个答案:

答案 0 :(得分:1)

这应该有效:

def dec2bin(num):
    return bin(int(num))[2:]

int将字符串num转换为整数。 bin将其转换为二进制表示形式(再次为字符串)。 [2:]删除前两个字符,这两个字符只是二进制表示的指示符。

答案 1 :(得分:1)

以下内容可行:

def dec2bin(dec):
    return format(int(dec), "b")

你可以这样测试:

print dec2bin("11")

答案 2 :(得分:0)

假设您可以使用int将字符串转换为整数:

def dec2bin(snum):
    n = int(snum)
    bin_s = ['1' if (n >> b) & 1 else '0' for b in range(n.bit_length())]
    return ''.join(reversed(bin_s))

让我们测试一下

>>> dec2bin('11')
'1011'

基本上,它会扫描从字符串中获取的整数并检查其中的每一位。

它将数字向右移动并检查最低有效位并使用值1(或者我们可以将掩码向左移动并保持数字不变)。

每个位检查的结果用于填充列表,然后将其反转并连接以形成字符串。

如果使用列表推导会使你看起来太酷而无法成真,请使用for循环:

def dec2bin(snum):
    n = int(snum)
    bin_s = []
    for b in range(n.bit_length()):
        cur_bit = (n >> b) & 1
        sbit = chr(ord('0') + cur_bit)
        bin_s.append(sbit)
    return ''.join(reversed(bin_s))

如果你可以使用python的内置format函数,另一个解决方案是:

def dec2bin(snum):
    return format(int(snum),"b")

进一步说明澄清算法(主要假设是我们只讨论无符号整数):

计算机使用数据的二进制表示(即位,零和1)。从右到左依次放置,它们以2的递增幂形成一个数字,就像十进制数字一样。

例如,数字十三(13表示基数为10:1 * 10 ^ 1 + 3 * 10 ^ 0)以二进制形式写成1101(1 * 2 ^ 3 + 1 * 2 ^ 2 + 0 * 2 ^ 1 + 1 * 2 ^ 0)并以字节(8位)的形式存储在存储器中。

LSB(最低有效位)是功能最弱的位(二进制数字),即1101中最右边的位,因为它在功率为2时的权重最小。

Python允许整数的可变大小,这就是我使用bit_length方法找出存储该数字所需的位数的原因。其他语言(例如C)为数字分配预定义的大小,通常与CPU提供的寄存器宽度相同(或更小)。

答案 3 :(得分:0)

这是一个函数,它还允许您选择输出中的位数。

def int2bin(n, count=24):
    """returns the binary of integer n, using count number of digits"""
    return "".join([str((n >> y) & 1) for y in range(count-1, -1, -1)])  

通常需要一个int:

print int2bin(44)  
'000000000000000000101100'  

但您可以通过首先将其转换为int来使用字符串:

print int2bin(int("44"))  
'000000000000000000101100'

答案 4 :(得分:0)

这里的挑战是编写一种不使用任何python数学函数的字符串处理算法。可以在here中找到以下程序的规范。

Python程序

fm <- lm(y ~ x + 0)
mean(resid(fm))

输出

while True:
    indecimal_str = input('Enter (decimal) integer: ')
    if indecimal_str == '':
        raise SystemExit
    indecimal = list(indecimal_str)
    exbin = []
    print(indecimal, '<->', exbin)
    while True:
        if len(indecimal) == 0:
            print('Conversion', indecimal_str, '=', "".join(exbin))
            print()
            break
        carry_state = False            
        g = indecimal[len(indecimal)-1]
        if g in '02468':
            exbin.insert(0, '0')
        elif g in '13579':
            exbin.insert(0, '1')
            if   g == '1': indecimal[len(indecimal)-1] = '0'
            elif g == '3': indecimal[len(indecimal)-1] = '2'
            elif g == '5': indecimal[len(indecimal)-1] = '4'
            elif g == '7': indecimal[len(indecimal)-1] = '6'
            else         : indecimal[len(indecimal)-1] = '8'                 
        else:
            print('Input not valid')
            raise SystemError
        for i in range(0,len(indecimal)):
            if  carry_state == False:
                if indecimal[i] in '13579':
                    carry_state = True                     
                if indecimal[i] in '01':
                    indecimal[i] = '0'
                elif indecimal[i] in '23':
                    indecimal[i] = '1'
                elif indecimal[i] in '45':
                    indecimal[i] = '2'
                elif indecimal[i] in '67':
                    indecimal[i] = '3'
                elif indecimal[i] in '89':
                    indecimal[i] = '4'
                else:
                    print('Input not valid')
                    raise SystemError
            else: # carry_state == True
                if indecimal[i] in '02468':
                    carry_state = False
                if indecimal[i] in '01':
                    indecimal[i] = '5'
                elif indecimal[i] in '23':
                    indecimal[i] = '6'
                elif indecimal[i] in '45':
                    indecimal[i] = '7'
                elif indecimal[i] in '67':
                    indecimal[i] = '8'
                elif indecimal[i] in '89':
                    indecimal[i] = '9'
                else:
                    print('Input not valid')
                    raise SystemError
        if indecimal[0] == '0':
            indecimal.pop(0)       
        print(indecimal, '<->', exbin)