2009-09-17 11 views

Odpowiedz

124

Aby uzyskać maskę bitową:

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

aby sprawdzić, czy bit jest ustawiony:

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

Aby ustawić bit:

n |= mask; 

Aby wyczyścić trochę:

n &= ~mask; 

Aby przełączać się trochę:

n ^= mask; 

odnoszą się do Javascript bitwise operators.

19

Chcę dodać kilka rzeczy (ze dzięki @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

To wielkie dzięki. Czy możesz wyjaśnić, dlaczego bit_test działa? Rozumiem prawą zmianę, aby przenieść interesujący bit do skrajnej prawej pozycji, ale gubię się, próbując zrozumieć, czym jest wartość pośrednia i dlaczego jej pozostałość po podzieleniu przez 2 jest niezerowa po ustawieniu. – Raoul

+1

Po uzyskaniu pożądanego bitu do pozycji z prawej strony, po prostu sprawdzenie, czy nowa wartość jest osłabiona (nowa wartość% 2! = 0). Numer upośledzenia będzie miał bit0 = 1 lub bit0 = 0 (ponieważ bit0 jest równy 2, a moc 0 wynosi 1) – UnLoCo

0

Zbudowałem klasę BitSet za pomocą informacji @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); 
} 
Powiązane problemy