2013-08-15 11 views

risposta

16

Per riflettere uno o più bit, utilizzare binary XOR. Nel tuo caso, la maschera XOR appropriata è 1shiftedk bit a sinistra.

In Python:

In [58]: 0b01101^(1 << 2) 
Out[58]: 9 

L'espressione:

n^(1 << k) 

è valido in C, Java, Python e poche altre lingue (purché le variabili sono definite in modo appropriato).

1

Ecco come si farebbe in C:

n^(1 << k) 
4

sinistro spostare il numero 1 il numero di cifre è necessario, e quindi il numero di XOR.

JavaScript:

var num = 6, k = 2; 
num = num^(1 << k); 

Quello che sta accadendo:

num = 0b01101 XOR (0b00001 << 2) 
num = 0b01101 XOR 0b00100 
num = 0b01001 
2

In c è solo che questo per attivare:

n ^= 1 << k; 

ma ci sono altri modi di farlo come :

n |= (1 << k); 

Questo sposta po k a 1

Ora, se si desidera capovolgere il bit che si può fare un if con un unario e per vedere come è necessario capovolgere

number = pow(2,k)  
if((number & n) != number) 
    //this means that it's a 0 at position k 
    n |= (1 << k); 
else 
    //this means that it's a 1 at position k 
    n &= (0 << k); 
+0

In alternativa, invece di' pow (2, k) ', puoi usare' (n >> k) & 1' per trovare il valore in posizione ** k ** quando ** n ** è un numero intero. Risultando in un RSHIFT al posto di una chiamata di funzione, lo stesso si può dire per l'operatore di potenza '**', anche se le prestazioni sono poco preoccupanti. – holmberd

Problemi correlati