我有
bit1 =1
bit2 =2
bit3 =4
etc...
我想在第2位存储0或1(假或真), 所以:
my_value=0;
mydata |=bit2*myvalue;
或
my_value=1;
mydata |=bit2*myvalue;
(my_value 可以是某个复选框状态)
我的问题是,将 mydata 设置为 1 后,我无法将其设置为零。 按位 1 |= 0 为 1 ....
所以我需要一种方法将位设置为零。 有没有什么方法可以不用技巧就能做到这一点?
clear方法迫使我们事先知道值? 任何帮助w。值得赞赏。
最佳答案
更一般地说,其中 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;
}
}
关于Javascript 按位重置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26917182/