def get_bin(x, n=0):
"""
Get the binary representation of x.
Parameters
----------
x : int
n : int
Minimum number of digits. If x needs less digits in binary, the rest
is filled with zeros.
Returns
-------
str
"""
return format(x, 'b').zfill(n)
这是我刚刚实现的代码 . 这不是 method 但您可以将其用作 ready-to-use function !
def inttobinary(number):
if number == 0:
return str(0)
result =""
while (number != 0):
remainder = number%2
number = number/2
result += str(remainder)
return result[::-1] # to invert the string
1
这里是使用divmod()函数的简单解决方案,它返回提醒和没有分数的除法结果 .
def dectobin(number):
bin = ''
while (number >= 1):
number, rem = divmod(number, 2)
bin = bin + str(rem)
return bin
2
n=input()
print(bin(n).replace("0b", ""))
0
具有DEC,BIN,HEX所有必要功能的计算器:(使用Python 3.5制作和测试)
您可以更改输入测试编号并获取转换后的测试编号 .
# CONVERTER: DEC / BIN / HEX
def dec2bin(d):
# dec -> bin
b = bin(d)
return b
def dec2hex(d):
# dec -> hex
h = hex(d)
return h
def bin2dec(b):
# bin -> dec
bin_numb="{0:b}".format(b)
d = eval(bin_numb)
return d,bin_numb
def bin2hex(b):
# bin -> hex
h = hex(b)
return h
def hex2dec(h):
# hex -> dec
d = int(h)
return d
def hex2bin(h):
# hex -> bin
b = bin(h)
return b
## TESTING NUMBERS
numb_dec = 99
numb_bin = 0b0111
numb_hex = 0xFF
## CALCULATIONS
res_dec2bin = dec2bin(numb_dec)
res_dec2hex = dec2hex(numb_dec)
res_bin2dec,bin_numb = bin2dec(numb_bin)
res_bin2hex = bin2hex(numb_bin)
res_hex2dec = hex2dec(numb_hex)
res_hex2bin = hex2bin(numb_hex)
## PRINTING
print('------- DECIMAL to BIN / HEX -------\n')
print('decimal:',numb_dec,'\nbin: ',res_dec2bin,'\nhex: ',res_dec2hex,'\n')
print('------- BINARY to DEC / HEX -------\n')
print('binary: ',bin_numb,'\ndec: ',numb_bin,'\nhex: ',res_bin2hex,'\n')
print('----- HEXADECIMAL to BIN / HEX -----\n')
print('hexadec:',hex(numb_hex),'\nbin: ',res_hex2bin,'\ndec: ',res_hex2dec,'\n')
33
有点类似的解决方案
def to_bin(dec):
flag = True
bin_str = ''
while flag:
remainder = dec % 2
quotient = dec / 2
if quotient == 0:
flag = False
bin_str += str(remainder)
dec = quotient
bin_str = bin_str[::-1] # reverse the string
return bin_str
11
这是使用常规数学的另一种方式,没有循环,只有递归 . (普通案例0什么都不返回) .
def toBin(num):
if num == 0:
return ""
return toBin(num//2) + str(num%2)
print ([(toBin(i)) for i in range(10)])
['', '1', '10', '11', '100', '101', '110', '111', '1000', '1001']
28 回答
如果你正在寻找bin()等同于
hex()
,它是在python 2.6中添加的 .例:
Python的字符串格式方法可以采用格式规范 .
Format spec docs for Python 2
Format spec docs for Python 3
Python实际上已经内置了一些内容,能够执行
'{0:b}'.format(42)
等操作,它将为您提供42
或101010
的位模式(在字符串中) .对于更一般的哲学,任何语言或图书馆都不会为其用户群提供他们想要的一切 . 如果你提供了你所需要的,你应该在开发时收集代码片段,以确保你永远不必写两次相同的东西 . 例如:
假设Python还没有更简单的方法,它将根据十进制值构造二进制字符串 .
一般的想法是使用代码(按优先顺序):
语言或内置库 .
具有合适许可证的第三方库 .
你自己的收藏 .
你需要写一些新内容(并保存在你自己的集合中供以后使用) .
作为参考:
此函数可以转换与
18446744073709551615
一样大的正整数,表示为字符串'1111111111111111111111111111111111111111111111111111111111111111'
.它可以被修改为提供更大的整数,但它可能不像
"{0:b}".format()
或bin()
那样方便 .如果你想要一个没有0b前缀的文本表示,你可以使用这个:
当你想要一个n位表示:
或者,如果您希望有一个功能:
单行与 lambda :
测试:
EDIT :
但是之后 :(
比较
一种简单的方法是使用字符串格式,请参阅page .
如果你想拥有一个固定长度的二进制字符串,你可以使用这个:
如果需要两个补码,则可以使用以下行:
其中n是二进制字符串的宽度 .
替代方案摘要:
贡献者包括John Fouhy,Tung Nguyen,mVChr,Martin Thoma . 和Martijn Pieters .
通过使用按位运算符的另一种算法的另一种解决方案 .
没有反转字符串的更快版本 .
除非我误解了二进制字符串的含义,否则我认为您正在寻找的模块是struct
使用numpy pack / unpackbits,他们是你最好的朋友 .
输出:
这是我刚刚实现的代码 . 这不是 method 但您可以将其用作 ready-to-use function !
这里是使用divmod()函数的简单解决方案,它返回提醒和没有分数的除法结果 .
具有DEC,BIN,HEX所有必要功能的计算器:(使用Python 3.5制作和测试)
您可以更改输入测试编号并获取转换后的测试编号 .
有点类似的解决方案
这是使用常规数学的另一种方式,没有循环,只有递归 . (普通案例0什么都不返回) .
如果你愿意放弃"pure" Python但是获得了很多火力,there is Sage - example here:
您会注意到它以字符串形式返回,因此要将其用作您想要执行某些操作的数字
我发现了一种使用矩阵运算将十进制转换为二进制的方法 .
E
是输入的十进制数据,M
是二进制命令 .bindata
是输出二进制数据,其格式为1乘M二进制矩阵 .你可以这样做:
要么 :
这是为了python 3,它保持领先的零!
沿着与Yusuf Yazici的答案类似的路线
我调整它以使唯一的变量被改变是结果(当然是n) .
如果您需要在其他地方使用此功能(即,将结果用于其他模块),请考虑以下调整:
因此-1将是您的哨兵值,表明转换失败 . (假设您只转换正数,无论它们是整数还是长数) .
这是一个简单的二进制到十进制转换器,它不断循环
对于我们这些需要将有符号整数(范围-2 **(数字-1)到2 **(数字-1)-1)转换为2的补码二进制字符串的人,这适用于:
这会产生: