Sto cercando di trovare la parità di una stringa di bit in modo che restituisca 1 se x ha un numero dispari di 0.
posso solo usare operazioni bit per bit di base e quello che ho finora passa la maggior parte delle prove, ma mi chiedo 2 cose:Codice di parità bit per numero dispari di bit
Perché x^(x + ~ 1) lavoro? Mi sono imbattuto in questo, ma sembra darti 1 se c'è un numero dispari di bit e qualcos'altro se pari. Come 7^6 = 1 perché 7 = 0b0111
Questa è la giusta direzione per la risoluzione dei problemi? Sto assumendo che il mio problema derivi dalla prima operazione, in particolare (x + ~ 1) perché supererebbe alcuni numeri di complemento di 2. Grazie
Codice:
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;
}
Dove hai trovato quell'algoritmo? – rnunes
non usare 'int', ci sarà overflow e questo è quindi un comportamento non definito. Usa 'unsigned' e' 1u' invece, qui il wrap around è ben definito. –
Questo algoritmo non funziona. Restituisce 1 per tutti i valori compresi tra 0 e 255. –