Я создал метод преобразования int
в битовое поле (в списке), и он работает, но я уверен, что есть более элегантное решение - я просто смотрел на него долго.Целое число с битовым полем как список
Мне интересно, как бы вы конвертировали int
в битовое поле, представленное в list
?
def get(self):
results = []
results.append(1 if (self.bits & 1) else 0)
results.append(1 if (self.bits & 2) else 0)
results.append(1 if (self.bits & 4) else 0)
results.append(1 if (self.bits & 8) else 0)
results.append(1 if (self.bits & 16) else 0)
results.append(1 if (self.bits & 32) else 0)
results.append(1 if (self.bits & 64) else 0)
results.append(1 if (self.bits & 128) else 0)
return results
def set(self, pin, direction):
pin -= 1
if pin not in range(0, 8): raise ValueError
if direction: self.bits |= (2 ** pin)
else: self.bits &=~(2 ** pin)
+1 для хороших соображений синхронизации – snugglo
'[123 >> i & 1 для i в диапазоне (7, -1, -1)] 'является самым быстрым на моей машине. – tMC
@tMC: Я переработал тайминги на обоих моих компьютерах (Win 7 Ultimate 64bit) под Python 2.7.3 и 3.2.3, и мое решение всегда было быстрее, по крайней мере, на 20% (Python 2) и 45% (Python 3). –