• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przekroczenie max wartości zmiennej - wynik

0 głosów
1,503 wizyt
pytanie zadane 28 listopada 2015 w C i C++ przez Grzyboo Nałogowiec (28,880 p.)

Zawsze myślałem, że inaczej oblicza się liczbę przy przekroczeniu maksymalnej wartości. Jednak wynik programu mnie trochę zaskoczył. Jak takie coś przeliczyć?

char ch = 720;
cout << (int)ch << endl

Wynikiem będzie -48, co nie pokrywa się z moimi obliczeniami. Jak dojść do tego, wiedząc że char przyjmuje wartości -128 do 127?

1 odpowiedź

+5 głosów
odpowiedź 28 listopada 2015 przez Krawiec91 Pasjonat (19,600 p.)
wybrane 28 listopada 2015 przez Grzyboo
 
Najlepsza

Nic nadzwyczajnego tu się nie dzieje.
Liczba 720 to binarnie 10 1101 0000, czyli potrzeba 10 bitów (jeśli typ unsigned) albo 11 bitów, jeżeli ma to liczba ze znakiem. Próbujesz zapisać tę liczbę do zmiennej całkowitej o rozmiarze 8 - bitów (zmienna char). Z tych 10 bitów do zmiennej zostanie zapisane jedynie 8 młodszych bitów tej liczby (pogrubione). Przeliczając z binarnego U2 na system dziesiętny otrzymujemy: -2^7 + 2^6 + 2^4 = -128 + 64 + 16 = -48. Zmienna char została użyta bez modyfikatora unsigned, więc najstarszy bit jest bitem znaku, stąd to -2^7.

komentarz 28 listopada 2015 przez Grzyboo Nałogowiec (28,880 p.)
Super, dzięki

Podobne pytania

+1 głos
1 odpowiedź 929 wizyt
+1 głos
1 odpowiedź 278 wizyt
0 głosów
2 odpowiedzi 3,666 wizyt
pytanie zadane 21 kwietnia 2017 w C i C++ przez Jedyn Obywatel (1,200 p.)

93,720 zapytań

142,648 odpowiedzi

323,266 komentarzy

63,270 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...