Prova:
x ^= 0x14;
che attiva entrambi i bit. È un po 'poco chiaro in questione, come prima menzione di scambio e quindi dare un esempio di commutazione. Comunque, per scambiare i bit:
x = precomputed_lookup [x];
dove precomputed_lookup è un array di 256 byte, potrebbe essere il modo più veloce, dipende dalla velocità di memoria rispetto alla velocità del processore. In caso contrario, si tratta di:
x = (x & ~0x14) | ((x & 0x10) >> 2) | ((x & 0x04) << 2);
EDIT: Alcuni ulteriori informazioni sulla commutazione bit.
Quando XOR (^
) due valori interi insieme, il xor viene effettuata a livello di bit, in questo modo:
for each (bit in value 1 and value 2)
result bit = value 1 bit xor value 2 bit
modo che il bit 0 del primo valore viene esservi effettuato lo XOR con il bit 0 di il secondo valore, bit 1 con bit 1 e così via. L'operazione xor non influenza gli altri bit nel valore. In effetti, è un bit parallelo o xor su molti bit.
Guardando la tabella di verità per xor, vedrete che xor'ing un po 'con il valore' 1 'alterna effettivamente il bit.
a b a^b
0 0 0
0 1 1
1 0 1
1 1 0
Quindi, per attivare o disattivare i bit 1 e 3, scrivere un numero binario con uno in cui si desidera il bit per alternare e uno zero in cui si desidera lasciare il valore invariato:
00001010
convert all'esagono: 0x0a. È possibile attivare il maggior numero di bit come si vuole:
0x39 = 00111001
alternerà bit 0, 3, 4 e 5
Wow tre risposte identiche con numeri diversi - buona fortuna con quello! – Benjol
Stai cercando di interscambiare i due bit o di alternare i bit? Cioè, 00 diventa 00 o 11? –
Puoi chiarire "swap"? Intendi bit2 =! Bit2 e bit4 =! Bit4, o intendi bit2 = bit4 e bit4 = bit2? – Roddy