我正在尝试获取一个函数来取一个字符串dec,表示一个十进制数,例如“11”,我希望所述函数返回一个字符串,其中包含相应的二进制格式,在本例中为“1011” 。 所以这就是我到目前为止所做的:
def dec2bin(dec):
dec = str("11")
if dec > 1:
binary(dec//2)
return (dec % 2,end = "")
我是Python的新手,所以我不知道如何将数字转换为字符串(首先使用str())以及如何使它返回相应的二进制值。有人能指出我正确的方向吗?
答案 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)