Javascript按位重置值

时间:2014-11-13 19:49:59

标签: javascript

我有

bit1 =1
bit2 =2
bit3 =4 
etc...

我想在bit2存储0或1(false o true), 所以:

my_value=0;
mydata |=bit2*myvalue;

my_value=1;
mydata |=bit2*myvalue;

(my_value colud是一些复选框状态)

我的问题是,在将mydata设置为1后,我无法将其设置为零。 按位1 | = 0是1 ....

所以我需要一种方法将位设置为零。 有什么方法可以在没有技巧的情况下使用它吗?

明确的方法迫使我们先前知道价值? 任何帮助。不胜感激。

3 个答案:

答案 0 :(得分:2)

更一般地说,n从最低有效位开始为0:

设置n,请使用v |= (1 << n)

清除n,请使用v &= ~(1 << n)

切换n使用v ^= (1 << n)

如果您真的想要一个单行将特定位设置为truefalse(其中所需值保存在变量中),请使用:

v = (v & ~(1 << n)) | (value ? (1 << n) : 0);

即。首先清除该位,然后设置该位或将其保留为零,或者作为函数:

function bitset(n, value) {
    var mask = 1 << n;   // NB: no range check
    if (value) {
        return n | mask;
    } else {
        return n & ~mask;
    }
}

答案 1 :(得分:0)

您可以使用按位AND运算符&

a &= 0;
// a is 0

或者只是将新值设置为:

a = 0;
// a is 0

答案 2 :(得分:0)

  

所以我需要一种将位设置为零的方法。有什么方法可以在没有技巧的情况下使用它吗?

如果你知道该位设置为1,那么你可以随时XOR出来:

mydata ^= bit2;

如果你不知道,你必须使用AND补充你的位:

mydata &= (bit2 ^ -1)
mydata &= ~bit2