Function that takes a string representing a decimal number and returns it in binary format
我试图让一个函数取一个字符串dec,代表一个十进制数字,例如"11",我希望该函数返回一个字符串,其中包含相应的二进制格式,在本例中是"1011"。这就是我目前为止所拥有的:
1 2 3 4 5 6 7 | def dec2bin(dec): dec = str("11") if dec > 1: binary(dec//2) return (dec % 2,end ="") |
我对python非常陌生,所以我不知道如何首先将数字转换成字符串(使用str()),以及如何使它返回相应的二进制值。有人能给我指出正确的方向吗?
以下内容有效:
1 2 | def dec2bin(dec): return format(int(dec),"b") |
您可以这样测试它:
1 | print dec2bin("11") |
这应该有效:
1 2 | def dec2bin(num): return bin(int(num))[2:] |
这是一个函数,它还允许您选择输出中的位数。
1 2 3 | 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:
1 2 | print int2bin(44) '000000000000000000101100' |
但您可以先将字符串转换为int来使用它:
1 2 | print int2bin(int("44")) '000000000000000000101100' |
假设可以使用
1 2 3 4 | 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)) |
让我们来测试一下
1 2 | >>> dec2bin('11') '1011' |
基本上,它扫描从字符串中获得的整数并检查其中的每一位。
它将数字右移并检查最低有效位,并将其与值
每个位检查的结果用于填充一个列表,然后将该列表反转并连接成一个字符串。
如果使用列表理解会使您看起来太酷而不真实,请使用
1 2 3 4 5 6 7 8 | 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的内置
1 2 | def dec2bin(snum): return format(int(snum),"b") |
进一步说明算法(主要假设我们只讨论无符号整数):
计算机使用数据的二进制表示(即位、零和一)。一个接一个,从右到左,它们以2的升幂形成一个数字,就像十进制数字一样。
例如,数字13(13以10为基数表示:1*10^1+3*10^0)以二进制(1*2^3+1*2^2+0*2^1+1*2^0)写入1101,并以字节(8位)内的位存储在内存中。
LSB(最低有效位)是最不强大的位(二进制数字),即1101中最右边的位,因为它在2的幂方面最轻。
python允许整数的大小是可变的,这就是为什么我使用