Necesito comparar dos números y buscar similitudes en bits más significativos. Estoy tratando de determinar la cantidad de bits menos significativos que difieren.¿Cómo determinar el número de bits similares?
10111000
10111011
184 y 187 requieren un desplazamiento de dos, porque solo dos bits menos significativos difieren.
10111011
11111011
187 y 251 requieren un desplazamiento de siete, porque el séptimo bit menos significativo es diferente.
Mi primera idea fue XOR los números juntos, luego el bit-shift a la derecha hasta que el número fue igual a cero. Siento que hay una mejor solución bit-wise para esto que no involucra bucles, pero no he hecho suficiente mi propio truco para llegar a eso.
La solución necesita funcionar para cualquier 64 bits, ya que mis números se almacenan como UInt64
. Esto se está escribiendo en C#, pero la solución probablemente sea una que no se corresponde con el idioma.
11101101
11010101
necesitaría un desplazamiento de 6 bits. Estoy tratando de encontrar cuántos bits similares puedo quitar de la parte superior.
Buen problema para resolver, pero no está del todo claro cuál debería ser el resultado en el caso de, por ejemplo, los números 11101101 y 11010101 (es decir, hay una diferencia en varias posiciones). –
con un cambio de 1 en un bucle que incluso no necesita para xor ellos - en lugar de comparar a 0 puede cambiar hasta que sean iguales – doc
@Eugene - He añadido su ejemplo. @doc - Es cierto, pero sigue siendo lo que estoy tratando de evitar. Solo sabía que XORing era la dirección correcta. – dlras2