如何在JavaScript中设置,清除和切换一个位?

问题描述:

如何在JavaScript中设置,清除,切换和检查一下?如何在JavaScript中设置,清除和切换一个位?

+0

@user JavaScript和C/C++是不同的语言。非常有帮助,他们都有不同的答案。 – cmac 2017-03-09 20:00:33

为了得到一个位掩码:

var mask = 1 << 5; // gets the 6th bit 

为了测试某个位设置:

if ((n & mask) != 0) { 
    // bit is set 
} else { 
    // bit is not set 
} 

要设置位:

n |= mask; 

要清除位:

n &= ~mask; 

要切换了一下:

n ^= mask; 

参考Javascript bitwise operators

我想添加一些东西(与感谢@cletus)

function bit_test(num, bit){ 
    return ((num>>bit) % 2 != 0) 
} 

function bit_set(num, bit){ 
    return num | 1<<bit; 
} 

function bit_clear(num, bit){ 
    return num & ~(1<<bit); 
} 

function bit_toggle(num, bit){ 
    return bit_test(num, bit) ? bit_clear(num, bit) : bit_set(num, bit); 
} 
+1

非常感谢。你能解释为什么bit_test有效吗?我明白正确的转变将有趣的位移到最右边的位置,但我迷路了,试图理解中间值是什么,以及为什么当它被2除的余数在设置时不为零。 – Raoul 2014-11-15 14:49:13

+1

将所需位移到最右边位置后,您只需测试新值是否受损(new_value%2!= 0)。一个有害数字将会有bit0 = 1或者bit0 = 0(因为bit0的权重是2到0的权重是1) – UnLoCo 2014-11-16 11:19:54

我建了一个位集合类的@cletus的帮助信息:

function BitSet() { 
    this.n = 0; 
} 

BitSet.prototype.set = function(p) { 
    this.n |= (1 << p); 
} 

BitSet.prototype.test = function(p) { 
    return (this.n & (1 << p)) !== 0; 
} 

BitSet.prototype.clear = function(p) { 
    this.n &= ~(1 << p); 
} 

BitSet.prototype.toggle = function(p) { 
    this.n ^= (1 << p); 
}