Program który liczy ilość zer ile ma podana liczba w systemie binarnym

0

Tutaj mam program , który liczy ilość jedynek - prowadzący zastosował przesunięcie bitowe. Jak policzyć ile zer w binarnym ma podana liczba?
'

#include<stdio.h>

//suma jedynek w obliczanu liczby binarnej

int main(){
unsigned int a, suma1;
    printf("a = ");
    scanf("%d", &a);
    suma1 = 0;
        while(a)
        {
            if(a%2)
            {
            suma1++;
            }
        a= a>>1;

        }
printf("Liczba jedynek = %d\n", suma1);

return 0;

}

Proszę o wytłumaczenie i pomoc :)

1

To zależy od definicji problemu:

  • To ma być liczba zer w danym typie, licząc zera wiodące?
  • Czy może ma liczyć zera występujące tylko po wiodącej jedynce?

Prowadzący to d..a wołowa, bo wszystko wpakował w main.

0

Podstawowe pytanie: chodzi o liczbę zer w reprezentacji 32-bitowej, czy zer na pozycjach niższych od najwyższej znaczącej jedynki?

0

Chodzi o liczby 32 bitowe, przepraszam, to wazne ;)

0

W takim razie wynik odejmij od 32 i masz problem z głowy.

0

A jeśli druga wersja, to wystarczy zmienić warunek w if w kodzie prowadzącego.

0

#include<stdio.h>

//suma jedynek w obliczanu liczby binarnej

int main(){
unsigned int a, suma1;
printf("a = ");
scanf("%d", &a);
suma1 = 0;
while(a)
{
if(a%2)
{
suma1++;
}
a= a>>1;
suma1=32-suma1;
}
printf("Liczba zer = %d\n", suma1);

return 0;

}

Tak? Glupoty mi wychodzą

0

Załóżmy, że to integer:

    unsigned int a, sum_zeroes = 0, sum_ones = 0;
    printf("a = ");
    scanf("%d", &a);
        for (int i = 0; i < sizeof(int) * 8; i++){
            if(a & 1)
                sum_ones++;
            else
                sum_zeroes++;
            a >>=1;
        }
// a = 5
printf("Liczba jedynek = %d\n", sum_ones); // -> 2
printf("Liczba zer = %d\n", sum_zeroes);   // -> 30

(a & 1) sprawdza czy, tzw. Least Significant Bit jest jedynką (wtedy suna jedynek ++), a jak nie to zerem - zera ++. Oczywiście liczy zera w całej 32 - dwu bitowej reprezentacji liczby. Jka Potrzebujesz tylko w"środku", to tzreba jeszzce usunąć zera poczatkowe.

0

Dobra, sama już to napisałam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0