在Python中打印数字的二进制表示

73
我想在控制台上打印数字的二进制表示,这样我就可以看到所有与比特操作相关的操作。
在Python中怎么做呢?
5个回答

93
这种事情?
>>> ord('a')
97
>>> hex(ord('a'))
'0x61'
>>> bin(ord('a'))
'0b1100001'

7
严格来说,这是一个数字的二进制表示,但不一定是内存中的潜在位。 - bgusach

35

在Python 2.6+中:

print bin(123)

结果为:

0b1111011

在 Python 2.x 中

>>> binary = lambda n: n>0 and [n&1]+binary(n>>1) or []
>>> binary(123)
[1, 1, 0, 1, 1, 1, 1]

注意,示例取自:Mark Dufour的邮件列表文章。


1
你可以进一步添加bin = lambda b:'0b' +''。join(map(str,binary(b))),这样它就完全模仿了2.6+。 - Anurag Uniyal
1
我想要在二进制数字长度固定时,使用0进行填充。 - VaidAbhishek
1
bin(-7) 返回 -0b111,但是你的函数返回 [] - Cees Timmerman

33

从Python 2.6开始 - 使用字符串格式化方法:

"{0:b}".format(0x1234)

特别是,您可能希望使用填充(padding),以便不同数字的多次打印仍然对齐:

"{0:16b}".format(0x1234)

并且希望在左侧填充 0 而不是空格:

"{0:016b}".format(0x1234)

从Python 3.6开始 - 使用f-strings

使用f-strings的相同三个例子如下:

f"{0x1234:b}"
f"{0x1234:16b}"
f"{0x1234:016b}"

4

稍微离题,但可能会有所帮助。为了更好地打印用户友好界面,我会使用自定义打印函数,定义表示字符和组间间距以提高可读性。这是一个示例函数,它接受一个列表/数组和组宽度:

def bprint(A, grp):
    for x in A:
        brp = "{:08b}".format(x)
        L=[]
        for i,b in enumerate(brp):
            if b=="1":
                L.append("k")
            else: 
                L.append("-")
            if (i+1)%grp ==0 :
                L.append(" ")

        print "".join(L) 

#run
A = [0,1,2,127,128,255]
bprint (A,4)

输出:

---- ----
---- ---k
---- --k-
-kkk kkkk
k--- ----
kkkk kkkk

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接