我有點混淆了正確設置位掩碼位的方法。我有以下功能和標誌:在位掩碼中設置位的正確方法是什麼?
var userBmask = 0;
const EMAIL_CONFIRMED = 1;
const EMAIL_UNSUBSCRIBED = 2;
setBit: function (bit) {
userBmask |= 1 << bit; // 10
}
比方說,我要爲電子郵件確認位:
setBit(EMAIL_CONFIRMED);
我userBmask
上面的行之後是:10
。但我不確定這是否正確,因爲實際上我是先設定第二位。我應該重寫setBit
功能如下因素,從最右邊的位置位?:
setBit: function (bit) {
userBmask |= 1 << bit - 1; // 01
}
現在setBit(EMAIL_CONFIRMED)
後,我拿到導致01
編輯: 謝謝您的回答。請看下面的內容。因爲我使用的是32位的javascript,我可以用'0 ... 31位進行位掩碼。但是,如果我嘗試設置的最後一個可用位(含31)我得到負數:
const NEXT_BIT = 31;
setBit(NEXT_BIT); // userBmask now is -10000000000000000000000000000000
它是預期的行爲,可能是可能的錯誤的結果呢?
感謝您的回答 – Erik