Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

Co to jest przepełnienie całkowite?

Okładka posta: Co to jest przepełnienie całkowite?
Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
Masz licznik, który może liczyć tylko do pewnej liczby. Na przykład, kieszonkowy kalkulator, który pokazuje maksymalnie 999. Jeśli spróbujesz dodać 1 do 999, nie będzie w stanie pokazać 1000 - cyfry po prostu "przepełnią się" (overflow) i kalkulator pokaże coś zupełnie innego, na przykład 000.
W programowaniu taki efekt nazywa się integer overflow (przepełnienie liczby całkowitej).
Dzieje się tak, gdy liczba staje się większa od maksymalnej wartości, którą może przechować wybrany typ zmiennej.
Na przykład, jeśli zmienna int może przechowywać liczby do 2,147,483,647, to dodanie 1 sprawi, że jej wartość… stanie się negatywna!

Dlaczego 2,147,483,647 to "sufit" dla 32-bitowej liczby

W komputerze liczby przechowywane są w postaci binarnej (czyli jako sekwencja zer i jedynek).
"32-bitowy" oznacza, że do przechowywania liczby przydzielono 32 komórki, a w każdej może być albo 0, albo 1.
Jednak jeśli liczba jest signed (ze znakiem), to jedna z tych komórek jest zarezerwowana dla znaku:
  • 0 w pierwszym bicie — liczba dodatnia,
  • 1 w pierwszym bicie — liczba ujemna.
To znaczy, że zamiast 32 bitów dla wartości liczby pozostaje tylko 31 bit.
Maksymalna wartość
Gdy wszystkie 31 bitów (oprócz znaku) jest wypełnionych jedynkami, otrzymujemy największą możliwą dodatnią liczbę:
1111111111111111111111111111111 (31 jedynka)
W systemie dziesiętnym to dokładnie 2,147,483,647.
W formie szesnastkowej (hex) zapisuje się to jako 0x7FFFFFFF:
  • 7 — to binarnie 0111 (czyli znak 0 + trzy jedynki),
  • F — to binarnie 1111 (cztery jedynki),
  • i tak dalej do końca.
Dlatego w programach czasami występują bardzo dziwne błędy, a w historii zdarzały się nawet poważne awarie z powodu przepełnienia. Zdarzają się nawet memy z powodu błędu integer overflow, ale to nie jest pewne.

Ten post nie ma jeszcze żadnych dodatków od autora.

Czym jest format HEIC i dlaczego proste zmienienie jego nazwy na .jpg to zły pomysł
15 cze 18:17

Czym jest format HEIC i dlaczego proste zmienienie jego nazwy na .jpg to zły pomysł

meme code
meme code@memecode
Dlaczego wybór CMS jest ważny podczas tworzenia strony internetowej?
29 cze 12:34

Dlaczego wybór CMS jest ważny podczas tworzenia strony internetowej?

meme code
meme code@memecode
Błąd 403 na stronie: co to oznacza i jak go naprawić
24 lip 23:50

Błąd 403 na stronie: co to oznacza i jak go naprawić

meme code
meme code@memecode
Co to jest vibe coding?
25 lip 21:51

Co to jest vibe coding?

meme code
meme code@memecode
Czym jest eksplozja kombinatoryczna?
28 lip 11:50

Czym jest eksplozja kombinatoryczna?

meme code
meme code@memecode
Co to jest stos mózgowy (brain stack)?
28 lip 19:37

Co to jest stos mózgowy (brain stack)?

meme code
meme code@memecode
Co to jest plik HAR (HTTP Archive)?
25 sie 18:23

Co to jest plik HAR (HTTP Archive)?

meme code
meme code@memecode
Czym jest Bubble Sort (wyjaśnienie algorytmu)?
16 wrz 18:42

Czym jest Bubble Sort (wyjaśnienie algorytmu)?

meme code
meme code@memecode
Czym jest wzrost eksponencjalny?
16 wrz 18:57

Czym jest wzrost eksponencjalny?

meme code
meme code@memecode
Czym jest złożoność faktorialna?
16 wrz 19:03

Czym jest złożoność faktorialna?

meme code
meme code@memecode
Czym jest NP-trudność?
16 wrz 19:31

Czym jest NP-trudność?

meme code
meme code@memecode
Offset vs Cursor Pagination w Rails: co wybrać i dlaczego
24 wrz 15:22

Offset vs Cursor Pagination w Rails: co wybrać i dlaczego

meme code
meme code@memecode