sprawdzenie bitu

0

Witam, chciałbym napisać kod do programu pobierającego liczbę całkowitą i sprawdzający czy bit 5 i 11 ma wartość 0 lub 1 w C.

#include<stdio.h>

int main()
{
    int liczba;

    printf ("Podaj liczbe calkowita:\n");
    
    scanf("%d",&liczba);

    if (liczba & 1 << 4)
    {
        printf ("4 bit ma wartosc 1\n");
    }

    if (liczba & 1 << 10)
    {
        printf ("10 bit ma wartosc 1\n");
    }
}

Sprawdzenie bitu 5 działa, natomiast 11 nie. Dlaczego?

0

Bo to co robisz nie ma w ogóle sensu? Jeśli juz to powinieneś NAJPIERW przesunąć sobie bity a POTEM robić and z maską bitową.

0

@RedJack chyba sprawdzenie 11 działa a 5 nie. @Shalom przecież najpierw przesuwa.

0

Ja w tym pierwszym porównaniu nie widzę żadnego przesuwania ;)

0
#include<stdio.h>

int main()
{
    int liczba;

    printf ("Podaj liczbe calkowita:\n");
    
    scanf("%d",&liczba);

    if (liczba & 1 << 4)
    {
        printf ("4 bit ma wartosc 1\n");
    }

    if (liczba & 1 << 10)
    {
        printf ("10 bit ma wartosc 1\n");
    }
}

Znak nierówności mi uciekł, 11 nie działa

0

Mógłby mi to ktoś jakoś jaśniej wytłumaczyć?

0

http://en.cppreference.com/w/c/language/operator_precedence - najpierw wykona się and a potem dopiero przesunięcie bitowe. I'm an idiot.

0

Więc jak zrobić, żeby najpierw przesunąć bity?

1

@RedJack nie wiem co wyjaśniać. Pokazałem ci że kod działa. 1024 to są same zera i zapalony 10 bit.

0

Jak dla mnie to problem nie leży w programie, tylko w tym że sam nie rozumiesz do końca wyników tych operacji.
Napisz jaka jest liczba wejściowa, jakiego wyniku oczekujesz i dlaczego.

0

Od początku kod był dobry -.-, ale fail. Dzięki za pomoc.

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