2009-09-17 7 views

risposta

124

Per ottenere una maschera di bit:

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

per verificare se è impostato un po ':

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

Per impostare un po':

n |= mask; 

Per cancellare un po ':

n &= ~mask; 

Per passare un po ':

n ^= mask; 

Fare riferimento alla Javascript bitwise operators.

19

voglio aggiungere alcune cose (con grazie a @ 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

Questo è fantastico, grazie. Puoi spiegare perché bit_test funziona? Capisco lo spostamento corretto per spostare il bit interessante nella posizione più a destra, ma mi perdo cercando di capire quale sia il valore intermedio e perché il suo resto quando diviso per 2 sia diverso da zero quando impostato. – Raoul

+1

Dopo aver ottenuto il bit desiderato nella posizione più a destra, è sufficiente verificare se il nuovo valore è compromesso (new_value% 2! = 0). Un numero indebolito avrà bit0 = 1 oppure bit0 = 0 (perché bit0 peso è 2 per alimentare 0 che è 1) – UnLoCo

0

ho costruito una classe BitSet con l'aiuto delle informazioni @ 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); 
} 
Problemi correlati