Probar:
x ^= 0x14;
que alterna los dos bits. No está nada claro, ya que primero menciona el intercambio y luego da un ejemplo de alternar. De todos modos, para intercambiar los bits:
x = precomputed_lookup [x];
donde precomputed_lookup es una matriz de 256 bytes, podría ser la forma más rápida, depende de la velocidad de la memoria con relación a la velocidad del procesador. De lo contrario, es:
x = (x & ~0x14) | ((x & 0x10) >> 2) | ((x & 0x04) << 2);
EDITAR: Alguna más información sobre alternar bits.
Cuando XOR (^
) dos valores enteros juntos, el xor se realiza a nivel de bits, como este:
for each (bit in value 1 and value 2)
result bit = value 1 bit xor value 2 bit
de modo que el bit 0 del primer valor se xor'ed con el bit 0 de el segundo valor, el bit 1 con el bit 1 y así sucesivamente. La operación xor no afecta a los otros bits en el valor. En efecto, es un bit paralelo xor en muchos bits.
Al mirar la tabla de verdad para xor, verá que xor'ing un poco con el valor '1' efectivamente conmuta el bit.
a b a^b
0 0 0
0 1 1
1 0 1
1 1 0
Así, para cambiar los bits 1 y 3, escribir un número binario con un uno en el que desea el bit para alternar y un cero en el que desea dejar el valor sin cambios:
00001010
convertido hex: 0x0a. Puede alternar tantos bits como desee:
0x39 = 00111001
conmutará bits 0, 3, 4 y 5
Wow tres respuestas idénticas con diferentes números - ¡buena suerte con eso! – Benjol
¿Está tratando de intercambiar los dos bits o alternar los bits? Es decir, ¿00 se convierte en 00 u 11? –
¿Puedes aclarar "swap"? ¿Quiere decir bit2 =! Bit2, y bit4 =! Bit4, o quiere decir bit2 = bit4 y bit4 = bit2? – Roddy