Estoy tratando de aprender sobre la manipulación de bits resolviendo algunos problemas después de aprender los conceptos básicos y en algunas soluciones, parece que veo este formato. Por ejemplo:

N = (N & 0xAAAA)>>1 | (N & 0x5555)<<1

¿Qué hace esto (específicamente el 0XAAAA y 0x5555)? ¿Y cuál es el nombre de esta sintaxis o formato para que pueda buscarlo?

Gracias

1
ittoryu 27 ene. 2016 a las 19:35

2 respuestas

La mejor respuesta

Esos son valores hexadecimales. El 0xAAAA es equivalente a 1010101010101010. A = 1010 (en binario). Por lo tanto, 4 A son cuatro secuencias del valor binario.

Cuando combinas eso con un & binario, buscas todos los bits de N que coinciden con el patrón 1010 ... donde ambos bits son 1 y solo guardan esos bits.

Ejemplo:

  1110101010101001
& 1010101010101010
------------------
  1010101010101000

Lo mismo ocurre con el 0x5555. 5 = 0x0101. Con suerte se entiende la idea.

El operador binario u, por otro lado, devuelve un 1 en cada lugar donde los números binarios tienen un 1, como en:

  1010
| 0101
------
  1111

Los operadores de desplazamiento de bits (>> y <<) mueven cada dígito binario un lugar (según la dirección de las flechas) y así sucesivamente. El hexadecimal es un formato más agradable para visualizar los bits sin tener que escribir cada bit.

2
MiltoxBeyond 27 ene. 2016 a las 16:44

Es notación hexadecimal. El "0x" indica que es un número hexadecimal, el resto de los dígitos son el valor. El 0x antepuesto es una convención estándar utilizada en muchos sistemas y lenguajes, como C y sus descendientes, Unix Shell, Windows Powershell.

AAAA es igual a 43690 en base 10 (decimal estándar). De manera similar, 0x5555 = 21845. Hex es una base común para trabajar durante las operaciones bit a bit (que es lo que está sucediendo en su código), porque la base es una potencia de dos y es mucho más compacta de escribir que la binaria.

2
Esoteric Screen Name 27 ene. 2016 a las 16:39