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;
}