Prendere il XOR di 2 numeri (per esempio un & b), e contare il numero di quelle in un^b
int bitsSwapRequired (int a, int b){
int count = 0;
for (int c = a^b; c!=0 ; c >> 1)
count += c & 1;
return count;
}
Possiamo fare un po 'meglio, piuttosto che semplicemente spostando c ripetutamente mentre si controlla il bit meno significativo, possiamo continuamente capovolgere il bit più a destra impostato su 1 e contare quanto tempo ci vuole per raggiungere 0. L'operazione c = c & (c-1) cancellerà il bit più a destra impostato su 1 in c.
int bitsSwapRequired (int a, int b){
int count = 0;
for (int c = a^b; c != 0; c = c & (c-1))
count ++;
return count;
}
fonte
2015-10-12 07:14:31
Esiste una lingua particolare? –
È noto che entrambi gli interi hanno lo stesso numero di bit 0 e lo stesso numero di 1 bit? – Omnifarious
@Omnifarious - Nessuna informazione non è nota – user450090