Naslov
Napisati funkciju koja prima celobrojni broj x i računa razliku između sume bitova koji se nalaze na parnim i sume bitova koji se nalaze na neparnim pozicijama u binarnoj reprezentaciji tog broja x.
Ulaz
Jedan celobrojni broj x.
Izlaz
Jedan celobrojni broj koji predstavlja razliku između sume bitova na parnim pozicijama i sume bitova na neparnim pozicijama.
Primer 1
Ulaz
13
Izlaz
1
Primer 2
Ulaz
3
Izlaz
0
Rešenje
main.c
#include <stdio.h>
int razlika_suma_bitova(unsigned x) {
unsigned maska_parna = 0x55555555; // (0b0101010101010101...)
unsigned maska_neparna = 0xAAAAAAAA; //(0b1010101010101010...)
unsigned parni_sum = 0, neparni_sum = 0;
unsigned parni_bitovi = x & maska_parna;
unsigned neparni_bitovi = x & maska_neparna;
while (parni_bitovi) {
parni_sum += parni_bitovi & 1;
parni_bitovi >>= 1;
}
while (neparni_bitovi) {
neparni_sum += neparni_bitovi & 1;
neparni_bitovi >>= 1;
}
return parni_sum - neparni_sum;
}
int main() {
int x;
scanf("%x", &x);
int razlika = razlika_suma_bitova(x);
printf("%d\n", razlika);
return 0;
}