Operacje na bitach

0
int main(void)
{
    unsigned int bit = 512, mBit;
    mBit = ~bit;
    bit = bit & mBit;
    printf("%d %d", bit, mBit);
    return 0;
}

Taki kod zwraca mi wynik "0 -513". Według moich obliczeń powinno być "0 511"
bit: 1000000000;
mBit: 0111111111;
bit & mBit = 0000000000

Co jest nie tak?

0

Coś jest nie tak. Nie czytasz dokumentacji.
http://www.cplusplus.com/reference/cstdio/printf/
%d to signed int... tobie chodziło o %u
Poza tym chyba nie wiesz ile bitów ma int32 ;]

1

int ma najczęściej 32 bity, więc bit to raczej 00000000000000000000001000000000

0

Hmm... ja po prostu potrzebuję odpowiedzi dlaczego wyświetla się -513.
Powiedzmy, że nie mam dostępu do komputera, taki kod mam na kartce i mam napisać co się wyświetli i dlaczego

0
Lirdoner napisał(a):

Hmm... ja po prostu potrzebuję odpowiedzi dlaczego wyświetla się -513.
Powiedzmy, że nie mam dostępu do komputera, taki kod mam na kartce i mam napisać co się wyświetli i dlaczego

Bo wyświetlasz to w trybie signed int (%d), czyli oznaczonej liczby (ze znakiem), znak określa najbardziej znaczący bit w liczbie (ten całkiem po lewej), więc jeśli jest ustawiony na 1 - to znak liczby int będzie ustawiony na minus w trybie wyświetlania z parametrem %d zamiast %u.

0

a skąd się bierze 513?

0

@Lirdoner pewnie z arytmetyki, ale co ja tam wiem

0

Trochę nie czaje tego. Jeżeli bit to 00000000000000000000001000000000 to mBit to 11111111111111111111110111111111
Jak ma mi z tego wyjść 513?

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