Estoy tratando de encontrar la paridad de una cadena de bits para que devuelva 1 si x tiene un número impar de 0.
sólo puedo utilizar las operaciones básicas de bits, por lo que tengo hasta ahora pasa la mayor parte de las pruebas, pero me pregunto 2 cosas:Código de paridad de bits para el número impar de bits
¿Por qué x^(x + ~ 1) el trabajo? Me encontré con esto, pero parece darte 1 si hay un número impar de bits y otra cosa si es par. Al igual que 7^6 = 1 porque 7 = 0b0111
¿Es esta la dirección correcta de resolución de problemas para esto? Supongo que mi problema proviene de la primera operación, específicamente (x + ~ 1) porque desborda ciertos números de complemento de 2. Gracias
Código:
int bitParity(int x) {
int first = x^(x + ~1);
int second = first^1; // if first XOR gave 1 you'll return 0 here
int result = !!second;
return result;
}
¿Dónde encontraste ese algoritmo? – rnunes
no use 'int', habrá desbordamiento y este es un comportamiento indefinido. Use 'unsigned' y' 1u' en su lugar, aquí el wrap around está bien definido. –
Este algoritmo no funciona. Devuelve 1 para todos los valores entre 0 y 255. –