2009-09-17 55 views

回答

124

爲了得到一個位掩碼:

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

19

我想添加一些東西(與感謝@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

0

我建了一個位集合類的@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); 
} 
相關問題