我有点混淆了正确设置位掩码位的方法。我有以下功能和标志:在位掩码中设置位的正确方法是什么?
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