$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \renewcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mss}{\,\mathrm{\frac{m}{s^2}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

Распон целобројних типова

Савремени микропроцесори изузетно ефикасно извршавају операције над целобројним подацима записаним на специфичан начин. Да би то искористили, многи програмски језици користе различите типове података чији је скуп вредности неки подскуп скупа целих бројева. Ти типови података записују целе бројеве на један од неколико међусобно сличних начина, који тачно одговарају садржају регистара микропроцесора при извођењу супер-ефикасних операција.

Последица таквог избора је са једне стране веома брзо извођење операција над целим бројевима, а са друге стране релативно ограничен простор за смештање једног целог броја. Због ограничености меморијског простора, може се догодити да неки сувише велики позитиван (или сувише мали негативан) број не може исправно да се смести у предвиђени простор, а таква ситуација се назива прекорачење (или у случају веома малог броја подкорачење). Проблем неће бити сигнализиран ни на који начин и програм наставља да ради као да је све у реду, али при читању неисправно записаног броја се добија погрешна вредност, што доводи до неочекиваног резултата рада читавог програма.

У програмском језику Пајтон постоји само један целобројни тип, а то је тип int који смо и до сада користили. Пајтон не поставља ограничења величине бројева који могу да буду вредности овог типа. Због тога у Пајтону не може да дође до проблема прекорачења и подкорачења, па нема ризика од те врсте грешака, какве се дешавају у програмима писаним на језицима C, C++, C# и многим другим. Због тога су задаци из овог поглавља релативно лаки за Пајтон програмере и личе на почетне задатке из ове збирке.

На жалост, чињеница да Пајтон интерно записује целе бројеве на неки свој начин има за последицу да се операције над целим бројевима извршавају знатно спорије, због чега су често и Пајтон програми у целини много спорији у односу на суштински исте програме у другим језицима (а ово није једини узрок спорости Пајтон програма).

Мада Пајтон програмери не морају да знају о различитим целобројним типовима, о њиховом опсегу, о прекорачењима, подкорачењима и проблемима који из тога проистичу, и за њих може да буде корисно (као део опште информатичке културе) да знају да ова врста проблема постоји у многим програмским језицима, јер је условљена архитектуром рачунара. Ово нарочито важи за оне Пајтон програмере који намеравају да уз Пајтон науче и друге програмске језике, или да у неком тренутку своје (и туђе) Пајтон програме учине ефикаснијим тако што ће користити целобројне типове задате дужине, као што су они из библиотеке NumPy.

Целобројни типови задате дужине обично користе 1, 2, 4 или 8 бајтова и при томе могу да садрже целе бројеве са или без знака. За целобројни тип који садржи целе бројеве са знаком кажемо да је означен, а онај који садржи само бројеве од 0 навише кажемо да је неозначен. Одговарајући распон вредности за поменуте дужине и означеност је:

дужина означеност распон
1 бајт означен \([-2^7, 2^7-1] = [-128, 127]\)
1 бајт неозначен \([0, 2^8-1] = [0, 255]\)
2 бајта означен \([-2^{15}, 2^{15}-1] = [-32768, 32767]\)
2 бајта неозначен \([0, 2^{16}-1] = [0, 65535]\)
4 бајта означен \([-2^{31}, 2^{31}-1] \approx [-2.1\cdot 10^9, 2.1\cdot 10^9]\)
4 бајта неозначен \([0, 2^{32}-1] \approx [0, 4.2\cdot 10^9]\)
8 бајтова означен \([-2^{63}, 2^{63}-1] \approx [-9\cdot 10^{18}, 9\cdot 10^{18}]\)
8 бајтова неозначен \([0, 2^{64} -1] \approx [0, 1.8\cdot 10^{19}]\)