2009-09-17 15 views

Antwort

124

Um eine Bitmaske zu erhalten:

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

Um zu testen, ob ein Bit gesetzt ist:

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

ein bisschen ein:

n |= mask; 

ein bisschen zu löschen:

n &= ~mask; 

Um ein wenig umzuschalten:

n ^= mask; 

zum Javascript bitwise operators finden.

19

Ich möchte einige Dinge hinzufügen (mit Dank an @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

Das ist toll, danke. Können Sie erklären, warum bit_test funktioniert? Ich verstehe die richtige Verschiebung, um das interessante Bit zur äußersten rechten Position zu bewegen, aber ich verliere es zu verstehen, was der Zwischenwert ist und warum sein Rest, wenn er durch 2 geteilt wird, ungleich null ist, wenn er gesetzt wird. – Raoul

+1

Nachdem Sie das gewünschte Bit an die äußerste rechte Position gebracht haben, testen Sie einfach, ob der neue Wert beeinträchtigt ist (new_value% 2! = 0). Eine Störungszahl hat Bit0 = 1 oder sonst Bit0 = 0 (weil Bit0 Gewicht 2 ist, um 0 zu versorgen, was 1 ist) – UnLoCo

0

ich eine BitSet Klasse mit Hilfe von @cletus Informationen gebaut:

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); 
} 
Verwandte Themen