печать битового представления чисел в питоне - PullRequest
54 голосов
/ 28 июня 2009

Я хочу напечатать битовое представление чисел на консоли, чтобы я мог видеть все операции, которые выполняются над самими битами.

Как я могу это сделать на python?

Ответы [ 5 ]

67 голосов
/ 28 июня 2009

Такого рода вещи?

>>> ord('a')
97
>>> hex(ord('a'))
'0x61'
>>> bin(ord('a'))
'0b1100001'
28 голосов
/ 28 июня 2009

В Python 2.6 + :

print bin(123)

Результат:

0b1111011

В питоне 2.x

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

Примечание, пример взят из: "Марк Дюфур" в http://mail.python.org/pipermail/python-list/2003-December/240914.html

24 голосов
/ 22 сентября 2013

Из Python 2.6 - с методом string.format :

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

в частности, вы можете использовать заполнение, чтобы несколько отпечатков разных номеров по-прежнему выстраивались в ряд:

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

и оставить отступ с начальными 0, а не пробелами:

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

Из Python 3.6 - с f-струнами :

Те же три примера с f-строками будут:

f"{0x1234:b}"
f"{0x1234:16b}"
f"{0x1234:016b}"
3 голосов
/ 28 июня 2009
1 голос
/ 12 мая 2015

Немного не по теме, но может быть полезно. Для более удобной печати я бы использовал пользовательскую функцию печати, определял символы представления и интервал между группами для лучшей читаемости. Вот пример функции, она принимает список / массив и ширину группы:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...