program sprawdzający stan n-tego bitu liczby całkowitej

0

Witam!
Mam problem z napisaniem chyba dość prostego programu. Program ten jak w temacie powinien sprawdzać stan n-tego wybranego bitu liczby całkowitej. Jedno i drugie podane z klawiatury.

C uczę się w sumie od niedawna i nie wiele umiem, pragnąłbym zauważyć na wstępie, więc proszę o wyrozumiałość i nie wytykanie błędów aż tak ;)

Więc w sumie doszedłem do prostej rzeczy, by podawać bit do sprawdzenia oraz liczbę:

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

int liczba;
int bit;

int main()
{
        printf("Podaj liczbe: ");
        scanf("%d", &liczba);
        printf("Podaj bit: ");
        scanf("%d", &bit);
        getch();
}

I w sumie powinienem przejść dalej. Zamienić liczbę podaną na liczbę binarną.
I tu mam w sumie problem bo próbowałem różnie: funkcją bitset, sizeof oraz fukcjami, które znalazłem w internecie. Przy tych przynajmniej kompilator nie wywala błędów... Tylko, że nie wiem jak mam to napisać poprawnie by działało jak powinno.

no, ale kombinując otrzymałem taki oto twór:

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

int liczba;
int bit;

int main()
{
        printf("Podaj liczbe: ");
        scanf("%d", &liczba);
        printf("Podaj bit: ");
        scanf("%d", &bit);

}


string byteToBin(unsigned char byte)
{
       string binary;
        for (int liczba=sizeof(byte)*8-1;liczba>=0;liczba--)
        {
            unsigned char bit=((byte>>liczba)&1);
            binary+=bit;
        }
        return binary;
       }

jest to źle, tyle wiem.
więc proszę o rady, jak możecie poprawcie ten kod na prawidłowo, bym chociaż mógł ruszyć z tym dalej...
dzięki z góry.

0

Najłatwiej? Zrób sobie tzw maskę bitową, zlożoną np. z samych 0 i jednej 1 na tym n-tym bicie. Następnie zrób sobie
maska & liczyba
Jeśli wynik tej operacji będzie 1 to znaczy że bit był zapalony (1) a jeśli 0 to znaczy ze nie był.

0
int stan_bitu(int liczba, int numer_bitu)
{
  return liczba & 1 << numer_bitu;
}
0

Shalom - jak ją stworzyć?

johny_bravo - w którym miejscu i zamiast tego to zastosować?

Wiem, że wstyd takie pytania zadawać, ale jestem totalny 'newbie' w C ;)

0

No geeez... to jest funkcja, funkcji podaj parametry, dostaniesz odpowiedz czy dany bit jest ustawiony (1 tak, 0 - nie).

0

ok, walcząc troszkę dłużej powstało coś takiego...
tyle, że oczywiście nie działa :P
problemem jest wg mnie

printf("%d",stan_bitu);
#include <conio.h>
#include <stdio.h>
#include <iostream.h>

int liczba;
int bit;
   int stan_bitu(int , int )  ;

void main()
{
        printf("Podaj liczbe: ");
        scanf("%d", &liczba);
        printf("Podaj bit: ");
        scanf("%d", &bit);
        printf("%d",stan_bitu);
        getch();
}

          int stan_bitu(int liczba, int bit)
{
int pom=liczba;

int tab[10]={0,0,0,0,0,0,0,0,0,0};
 for(int i=10;i--;i>=0)
 {
  if(pom>2^i)
  {
  tab[i]=1;
  pom=pom%(2^i);
  }
 }
return tab[bit];
}
0

to jest funkcja, podajesz jej parametry, zeby sie wykonala, tak jak printf i scanf.

printf("%d",stan_bitu(liczba, bit));

Co robi ten for ponizej? Bo sie raczej nie skompiluje ;)

0

;) Co odpowiedź, to inne rozwiązanie. Nie byłoby prościej tak?

void main()
{
        printf("Podaj liczbe: ");
        scanf("%d", &liczba);
        printf("Podaj bit: ");
        scanf("%d", &bit);
        printf("%d",(liczba>>(bit-1)) &1);
        getch();
}
0
johny_bravo napisał(a)
int stan_bitu(int liczba, int numer_bitu)
{
  return liczba & 1 << numer_bitu;
}

To jest najlepsze rozwiązanie.

0

teraz już w sumie widzę, że tylko komplikowałem sobie życie.
najważniejsze, że program się kompiluje i działa poprawnie.
Dzięki Wielkie :)

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