我已經創建了一個方法將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 2012-04-25 19:23:27
'[123 >> i和1在範圍內(7,-1,-1)]'是我機器上最快的。 – tMC 2012-04-25 19:32:51
@tMC:我已經在Python 2.7.3和3.2.3下重做了我的兩臺PC(Win 7 Ultimate 64bit)上的計時,而且我的解決方案始終快於至少20%(Python 2)和45%( Python 3)。 – 2012-04-25 19:38:36