Przepełnienie int. Język C

0

Witam,
Przerabiam książkę "Język C. Szkoła programowania", i chcę napisać program, w którym powinienem przepełnić zmienną int. W książce tej napisane jest: "Minimalny zakres dla typów short i int obejmuje wartość od -32768 do +32767". Więc na chłopski rozum aby przepełnić zmienną int do wartości 32767 trzeba dodać co najmniej 1. Jednak po dodaniu tej wartości zmienna nie przepełnia się tylko dodaje do siebie te dwie wartości. Przepełnienie następuje dopiero w momencie, gdy zamiast 32767 wpiszę wartość 2 147 483 647.
Czy ktoś może mi wyjaśnić, dlaczego tak się dzieje?
Pozdrawiam

1

Bo uczysz się z książki która pamięta czasy Mojżesza?
Zakres o którym mówisz to zakres 16 bitowych liczb ze znakiem, czyli coś co w C/C++ nazywa się short int.
Zwykły int ma 32 bity więc mieści zakres o którym napisałeś później.

0

Aha, dzięki. Książka z której się uczę wydana została w 2006;D
A możecie mi jeszcze napisać jaki jest zakres dla typu float?

0

od -inf do +inf ;) Musisz zrozumieć na czym polega reprezentacji liczb w tym typie.

0

A możesz wyjaśnić na czym polega? ;-)

0

Apropos intów:

"Minimalny zakres dla typów short i int obejmuje wartość od -32768 do +32767"

Minimalny znaczy minimalny: i w zależności od sytuacji/architektury/kompilatora może się zmieniać, tj być większą, ale nigdy w drugą stronę.

Co do floatów: Upraszczając, trzymane są one w notacji naukowej. Im większą wartość tam trzymasz, tym mniej jest ona dokładna: od pewnej wartości wyrażenie
(x+1)==x
zwróci pozornie paradoksalnie prawdę.

0

a jaki jest zakres wartości float?

0

Maksymalna liczba dla liczby zmiennoprzecinkowej to:
maksymalna_mantysa_dodatnia * 2^maksymalna_cecha_dodatnia
Minimalna liczba to oczywiście
maksymalna_mantysa_ujemna * 2^maksymalna_cecha_dodatnia
sprawdź ile bitów ma mantysa i cecha w reprezentacji o którą ci chodzi i policz.

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