我有
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 ....
所以我需要一种方法将位设置为零。 有什么方法可以在没有技巧的情况下使用它吗?
明确的方法迫使我们先前知道价值? 任何帮助。不胜感激。
答案 0 :(得分:2)
更一般地说,n
从最低有效位开始为0:
要设置位n
,请使用v |= (1 << n)
要清除位n
,请使用v &= ~(1 << n)
切换位n
使用v ^= (1 << n)
如果您真的想要一个单行将特定位设置为true
或false
(其中所需值保存在变量中),请使用:
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