Skip to main content

Co to jest przepełnienie liczb całkowitych?

Przepełnienie liczb całkowitych odnosi się do zjawiska, które występuje w niektórych typach danych komputerowych, w którym ich znaki przełączają się z dodatnie na negatywne, lub odwrotnie, gdy osiągają końce swoich odpowiednich zakresów.W zakresach komputerowych typy danych liczb całkowitych mają okrągłe zakresy, a kiedy osiągną jeden koniec swojego zasięgu, natychmiast przechodzą na drugi koniec swojego zakresu.Nazywa się to również przepełnieniem liczby całkowitej.

Podpisana liczba całkowita może pomieścić zakres wartości od -2 31 do (2 31 ) - 1. Ta liczba całkowita nie może mieć wartości (-2 31 ) - 1;Raczej kolejna liczba, do której się zwiększa, znajduje się na drugim końcu swojego zakresu: (2 31 - 1).Zmiana z negatywnej na dodatnie na końcu jej zasięgu jest przykładem przepełnienia liczb całkowitych.Z tego samego tokena liczba całkowita nie może mieć wartości 2 31 ;Wartość ta zamiast tego przełączałaby się na drugi koniec jej zakresu i stałby się -2 31 .

Ten przepełnienie ma znaczące konsekwencje podczas programowania.Tablica może mieć tylko tyle wskaźników, na ile pozwala na to typ liczby całkowitej, a wskaźniki ujemne nie liczą się.Jeśli programista próbuje utworzyć tablicę większą niż pozwala na to typ liczby całkowitej, mogą wystąpić znaczące błędy pamięci, ponieważ przepełnienie liczb całkowitych spowodowałoby wskaźnik ujemny.Jest to szczególnie niebezpieczne w językach, które nie mają wyraźnych granic sprawdzania tablic, takich jak C ++.

Gdy wystąpi przepełnienie liczby całkowitej, mogą wystąpić powiązane rodzaje przepełnienia, takie jak przepełnienie bufora, przepełnienie sterty i przepełnienie bufora stosu.We wszystkich tych przypadkach przepełnienie liczb całkowitych działa w celu przytłoczenia struktur pamięci większą liczbą danych, niż struktury te mogą się sprzątać.Te przepełnienia, w prostych programach, często nie robią więcej niż powodują nieprawidłowy błąd odczytu lub nieprawidłowego zapisu.Manipulacja tym problemem przez hakerów może jednak zaprojektować błędy pamięci, które mogą powodować poważniejsze problemy.

W najprostszych programach przepełnienie liczby całkowitych nie stanowi poważnego problemu.Granice typu liczb całkowitych są wystarczająco duże, aby problem z przepełnieniem nie wchodzi w grę, chyba że wiele danych jest obsługiwanych jednocześnie.W niektórych przypadkach przepełnienie można złagodzić, jak w przypadku liczników przyrostowych, używając większego typu danych o większym zakresie.Większy typ danych może teoretycznie napotkać ten sam problem z przepełnieniem, ale w miarę jak zakresy typu danych stają się większe, szanse na to stają się mniejsze.Każdy zakres typów danych liczb całkowitych jest co najmniej dwa razy większy niż następny najmniejszy, więc jest wystarczająco dużo miejsca na dodatkowe dane.