"Предложите способ посчитать количество ненулевых битов в содержимом файла с именем blob.dat". Предлагаю:
#!/usr/bin/python2.7
def bstr(n):
return ''.join([str(n >> x & 1) for x in (7,6,5,4,3,2,1,0)])
f = file('blob.dat', 'rb')
bytes = f.read()
sheet = ''.join([bstr(ord(c)) for c in bytes])
amount = 0
for bit in sheet:
if bit == '1': amount += 1
print amount
#!/usr/bin/python2.7
def bstr(n):
return ''.join([str(n >> x & 1) for x in (7,6,5,4,3,2,1,0)])
f = file('blob.dat', 'rb')
bytes = f.read()
sheet = ''.join([bstr(ord(c)) for c in bytes])
amount = 0
for bit in sheet:
if bit == '1': amount += 1
print amount
Ваш блог мне очень понравился так как качественный. Очень легко даётся информация. Я как новичок это ценю.
ReplyDeleteВы можете увидеть на моём блоге ссылку на этот.
см.Изучаем Python / Полезные блоги и сайты
This comment has been removed by the author.
ReplyDeleteЕжели заморочиться и попытаться оптимизировать по скорости, то можно замутить функцию подсчета единичных битов в байте табличным методом или по алгоритму Кернигана.
ReplyDeleteКроме того, существует аппаратная реализация - инструкция popcnt. В интелах она появилась вроде как с core i7 и входит в набор инструкций sse4.2
Матчасть по извращениям:
http://gurmeet.net/puzzles/fast-bit-counting-routines/
http://wiki.python.org/moin/BitManipulation#CA-8a4270f706bae502366d3d0db78ac93aad6ac04a_2
http://www.strchr.com/crc32_popcnt
http://wm.ite.pl/articles/sse-popcount.html