Tôi đã tạo một phương thức để chuyển đổi một số int
thành bitfield (trong danh sách) và nó hoạt động, nhưng tôi chắc chắn có giải pháp thanh lịch hơn - tôi vừa mới nhìn chằm chằm vào nó cho đến lâu.Integer to bitfield dưới dạng danh sách
Tôi tò mò, làm cách nào bạn chuyển đổi một int
thành bitfield được thể hiện trong một 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 cho cân nhắc thời gian thoải mái – snugglo
'[123 >> i & 1 cho i trong phạm vi (7, -1, -1)] 'là nhanh nhất trên máy của tôi. – tMC
@tMC: Tôi đã làm lại thời gian trên cả PC của tôi (Win 7 Ultimate 64bit), theo Python 2.7.3 và 3.2.3, và giải pháp của tôi luôn nhanh hơn ít nhất 20% (Python 2) và 45% (Python 3). –