2
我在回顧一些來自鬧鐘項目的代碼。該代碼使用整數來存儲重複出現的警報信息。也就是說,每發生一次MWF,就會發生一次警報。我知道整數只是一系列字節,每個字節都是一系列的位,所以您可以使用該位信息來創建一個整數,該整數對於每週的每個星期幾的每個模式都是唯一的。我不明白的是在這些功能的邏輯:Java位移...請解釋
// is a given day "set"?
private boolean isSet(int day) {
return (mDays & (1 << day)) > 0;
}
// set a given day to on or off
public void set(int day, boolean set) {
if (set) {
mDays |= (1 << day);
} else {
mDays &= ~(1 << day);
}
}
可能有人請解釋一下這兩個功能,以及它們是如何工作的?
「(二進制)00000001 << 1 == 00000010」 = 00000100'。值得一提的是,當它們從位'(二進制)11000001 << 1 == 10000010'和((二進制)11000001 >> 1 == 011000000' – 2013-04-25 22:45:39
)移出時,開始/結束處的位被丟棄。按位操作有點難以解釋。有時候你只需要在調試器下面弄清楚事情的真相,然後看看二進制形式的值來真正理解。 – 2013-04-25 22:48:47
如果mDays等於類似01010101的東西呢?如果你拿00000001並且把它移到00010000,它仍然不會等於01010101(即,00010000!= 01010101),所以它應該返回假,即使第4位都等於1.我錯過了什麼? – MrGibbage 2013-04-26 00:14:52