[C] Reprezentacja dwójkowa

0

Witam!
Potrzebuję pomocy w napisaniu programu w "C", mianowicie program ma zliczać liczbę zerowych bitów w dwójkowej reprezentacji liczby całkowitej - z użyciem operatorów bitowych. Ze względu na to, że jestem początkujący, nie potrafię tego napisać. Z góry Wielkie Dzięki za okazaną pomoc! Pozdrawiam! :)

0

A to bardzo dobrze że nie potrafisz. Masz okazję się nauczyć.
operatory << i >> to operatory przesunięcia bitowego w lewo i w prawo. Co to znaczy?
Jeśli masz liczbę np.
01100 to przesunięcie bitów w prawo zamieni ją na 00110 (i to ostatnie 0 które było na końcu nam zniknie, a na początku pojawi się nowe zero)
po przesunięciu bitów w lewo mamy z 01100
11000 (0 z przodu nam znika, a na końcu pojawia się 0).

Inaczej można powiedzieć ze przesuwanie bitów to dzielenie i mnożenie przez 2.
01100 = 12
00110 = 6 czyli 12/2
11000 = 24 czyli 12*2

Jak sprawdzić czy dany bit liczby jest 0 czy 1? Najłatwiej za pomocą operatora & i maski bitowej. Operator & zrobi logiczną koniunkcję odpowiadających sobie bitów. np.
1100 & 1010 = 1&1 1&0 0&1 0&0 = 1000
Jak widać 1 pojawia się tylko tam gdzie w obu wyrażeniach były 1.
Jeśli więc chcesz sprawdzić czy ostatni bit jest 1, to robisz po prostu:
liczba & 1 (bo 1 to jest binarnie 0001)
Jak drugi bit to
liczba & 2 (bo 2 to jest binarnie 0010)
jak trzeci bit to
liczba & 4 (bo 4 to jest binarnie 0100)
i tak dalej.

Jeśli wynik takiego wyrażenia == 0 to bit nie był zapalony, jeśli == 1 to był

0

Wskazówki okazały się bardzo przydatne :) trochę posiedziałem i powstał taki programik:

#include <stdio.h>
#include <conio.h>

void main (void)
{
        int x=0;
        int maska=1;
        unsigned int liczba_zer=0;
        int i=0;

        printf("Podaj liczbe: ");
        scanf("%d",&x);

        for (i=0;i<8;i++)
{
        if ((maska&x)==0) liczba_zer++;
        maska=maska<<1;
}
        printf("Liczba zer: %d",liczba_zer);
        getch();
}

Co w tym wszystkim najważniejsze, że działa :D
Dzięki za pomoc, pozdrawiam!

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