Operacje na bitach

Operacje na bitach
LI
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 10 lat
  • Postów:22
0
Kopiuj
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?

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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 ;]


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 3x, ostatnio: Shalom
RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około rok
1

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

LI
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 10 lat
  • Postów:22
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

MarekR22
Shalom już napisał skąd się to bierze
Bartosz Wójcik
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Postów:439
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.

edytowany 2x, ostatnio: Bartosz Wójcik
LI
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 10 lat
  • Postów:22
0

a skąd się bierze 513?

DR
  • Rejestracja:około 12 lat
  • Ostatnio:około godziny
  • Postów:1131
0

@Lirdoner pewnie z arytmetyki, ale co ja tam wiem

LI
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 10 lat
  • Postów:22
0

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

gośćabc
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Szczecin
  • Postów:500
0

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.