为将一个整数转换为二进制,我使用了以下代码:
>>> bin(6)
'0b110'
当需要删除'0b'时,我使用以下方法:
>>> bin(6)[2:]
'110'
如果我想将6
显示为00000110
而不是110
,我该怎么做呢?
>>> '{0:08b}'.format(6)
'00000110'
以下是格式化字符串的各个组成部分的解释:
{}
将变量放入字符串中0
获取参数位置为0的变量:
为该变量添加格式选项(否则它将表示十进制数6
)08
将数字格式化为在左侧填充八位零的形式b
将数字转换为其二进制表示形式如果您使用的是 Python 3.6 或更高版本,您还可以使用 f-字符串:
>>> f'{6:08b}'
'00000110'
0
代表format
函数的第0
个参数。冒号后面是格式化字符串,第二个0
表示用0填充至8个空格,b
表示二进制数。 - jamylakformat()
函数简化此操作:format(6, '08b')
;该函数接受一个值(应用于{..}
占位符)和一个格式规范(放在格式字符串中冒号后的内容)。 - Martijn Pieters'{0:08b}'.format(-6)
-> '-0000110'
。如果您不想要符号,可以使用struct
或-6%256
。 - n611x007bin(-6)[2:].zfill(8)
读作 '0000b110'
。 - jlandercy一个位操作的方法...
>>> bin8 = lambda x : ''.join(reversed( [str((x >> i) & 1) for i in range(8)] ) )
>>> bin8(6)
'00000110'
>>> bin8(-3)
'11111101'
x
中的位向右移并与 1
进行 AND 操作,实际上每次提取一个位(0 或 1)。 - Jongwarerange(7,-1,-1)
来删除reversed
;虽然更加“纯粹”,但可能不太可读/直观。 - S3DEV只需使用 format 函数
format(6, "08b")
一般形式为
format(<the_integer>, "<0><width_of_string><format_specifier>")
1000000次循环,3次中最佳结果:每次循环556纳秒
- SebMaeumiro的回答更好,不过我只是为了多样性而发布这个:
>>> "%08d" % int(bin(6)[2:])
00000110
numpy.binary_repr(num, width=None)
有一个神奇的宽度参数上述文档中的相关示例:
>>> np.binary_repr(3, width=4) '0011'
The two’s complement is returned when the input number is negative and width is specified:
>>> np.binary_repr(-3, width=5) '11101'
def intoBinary(number):
binarynumber=""
if (number!=0):
while (number>=1):
if (number %2==0):
binarynumber=binarynumber+"0"
number=number/2
else:
binarynumber=binarynumber+"1"
number=(number-1)/2
else:
binarynumber="0"
return "".join(reversed(binarynumber))
number=number/2
gives float, so number=number//2
seams better, also I would replace number=number//2
with number//=2
and b=b+"0"
with b+="0"
- Brambornumber=7
,你的函数返回的是 "111" 而不是 "0111",这是意料之外的。 - Ye Xu如果您不确定它是否始终应为8位数字,可以将其作为参数传递:
>>> '%0*d' % (8, int(bin(6)[2:]))
'00000110'
format(a, 'b')
将a的二进制值以字符串格式返回。
要将二进制字符串转换回整数,请使用int()函数。
int('110', 2)
返回二进制字符串的整数值。
"{0:b}".format(n)