Primitivni tip podataka

S Vikipedije, slobodne enciklopedije

U informatici, primitivni tip podataka je jedan od sledećih pojmova:

  • osnovni tip je tip podataka [1] obezbeđen od strane programskog jezika kao osnovni gradivni blok. Većina jezika dozvoljava složenije kompozitne tipove da se rekurzivno izgrade počevši od osnovnih tipova. 
  • ugrađeni tip je tip podataka za koji programski jezik obezbeđuje ugrađenu podršku.

U većini programskih jezika, sve osnovne vrste podataka su ugrađene. Pored toga, mnogi jezici pružaju i niz složenih tipova podataka. Mišljenja se razlikuju oko toga da li treba smatrati ugrađeni tip koji nije bazičan „primitivom“.

U zavisnosti od jezika i njegovog sprovođenja, primitivni tipovi podataka mogu ali ne moraju da imaju jedan-na-jedan preslikavanje sa objektima u memoriji računara. Međutim, obično se očekuje da operacije nad osnovnim primitivnim tipovima podataka budu najbrže jezičke konstrukcije koje postoje. Sabiranje celih brojeva, na primer, može biti izvedeno kao jedna mašinska instrukcija, dok neki procesori nude precizna uputstva za obrađivanje sekvenci znakova sa jednim uputstvom. Konkretno, C standard pominje da „običan Int objekat ima prirodnu veličinu predloženu od strane arhitekture izvršilačkog okruženja“. To znači da će int verovatno biti dug 32 bita na 32-bitnoj arhitekturi. Osnovni primitivni tipovi su gotovo uvek vrednosni tipovi.

Većina programskih jezika ne dozvoljava da se ponašanje ili mogućnosti primitivnih (ugrađenih ili osnovnih) tipova podataka menjaju programima. U izuzetke spada Smalltalk, koji dozvoljava da se svi tipovi podataka proširuju u okviru programa, dodajući na operacije koje se mogu obavljati na njima ili čak redefinisanje ugrađenih operacija.

Pregled[uredi | uredi izvor]

Stvarni opseg primitivnih tipova podataka koji je dostupan zavisi od konkretnog programskog jezika koji se koristi. Na primer, u C, niske su kompozitni, ali ugrađeni tip podataka, dok su u modernim dijalektima Bejsiku i Javaskriptu, one asimilovane u primitivni tip podataka koji je i osnovni i ugrađeni.

Klasični osnovni primitivni tipovi mogu uključivati:

Sofisticiranije vrste koje mogu biti ugrađene uključuju:

Specifični primitivni tipovi podataka[uredi | uredi izvor]

Celi brojevi[uredi | uredi izvor]

Ceo broj kao tip podataka može da sadrži ceo broj, ali ne i razlomak. Celi brojevi mogu biti ili označeni (dozvoljavajući negativne vrednosti) ili neoznačeni (samo ne negativne vrednosti). Tipične veličine celih brojeva su:

Veličina (Bajt) Veličina (Bit) Imena Označen opseg Neoznačen opseg
1 bajt 8 bita Bajt −128 to +127 0 do 255
2 bajtova 16 bita Reč,

kratak ceo broj

−32,768 do +32,767 0 do 65,535
4 bajtova 32 bita Dupla Reč, dugačak ceo broj (vin32, vin64, 32-bit Linuks[2]) −2,147,483,648 do +2,147,483,647 0 do 4.294.967,295
8 bajtova 64 bita dugačak ceo broj (C u 64-bit linuks[2]), long long (C), long (u Javi samo označena varijanta[3]) −9,223,372,036,854,775,808 do +9,223,372,036,854,775,807 0 do 18.446.744,073,709,551,615
beskonačan

/ 8

beskonačan Bignum -( ( 2 ^ beskonačan

) / 2 ) to +( ( 2 ^ beskonačan ) / 2 )

0 do 2 ^ beskonačan

Literali za cele brojeve se sastoje od niza cifara. Većina programskih jezika zabranjuje upotrebu zapeta za grupisanje cifara, iako Fortran (77, 90, i iznad, fiksni oblik izvora, ali ne i slobodan oblik izvora) omogućava ugrađene prostore, dok Perl, Rubi, Java i D dozvoljavaju ugrađene donje crte. Negacija je označena znakom minus (-) pre vrednosti. Primeri celih literala su:

  • 42
  • 10000
  • −233000

Bulovi[uredi | uredi izvor]

Bulov tip, obično označen sa „bul“ (bool, boolean), obično je logički tip koji može imati vrednost „tačno“ ili „netačno“. Iako je samo jedan bit neophodan da se smesti podešena vrednost „tačno“ ili „netačno“, programski jezici obično implementiraju logičke tipove kao jedan ili više bajtova.

Većina jezika (JavaPaskal i Ada, na primer) izvršava bulove tipove poštujući koncepte bulova kao posebanog logičkog tipa. Jezici, međutim, mogu implicitno konvertovati logičke u numeričke tipove nekad da daju proširenu semantiku bulovima i logičkim izrazima ili da postigne kompatibilnost sa ranijim verzijama jezika. U C++, na primer, Logičke vrednosti mogu da se implicitno konvertuju u cele brojeve, u skladu sa mapiranjem netačano → 0 i tačano → 1 (na primer, true + true bi bio izraz koji važi u vrednovanju do 2). Logički tip bool u C++ smatra se za tip celog broja i on je hibrid između numeričkog tipa i logičnog tipa.

Realni brojevi[uredi | uredi izvor]

Realni broj predstavlja racionalan broj ograničene preciznosti koji može imati razlomljeni deo. Ovi brojevi su interno čuvaju u formatu ekvivalentnom naučnoj notaciji, obično u binarnom sistemu, ali ponekad i u dekadnom sistemu. Pošto realni brojevi imaju ograničenu preciznost, samo podskupovi realnih ili racionalnih brojeva su egzaktno predstavljeni, ostali brojevi mogu biti predstavljeni samo približno.

Mnogi jezici imaju i jednostruku tačnost (često nazivanu float) i dvostruku tačnost.

Literali za realne brojeve uključuju decimalnu tačku, i obično koriste „e“ ili „E“ da označe naučne zapise. Primeri realnih literala su:

  • 20.0005
  • 99.9
  • −5000.12
  • 6.02e23

Neki jezici (na primer, Fortran, Pajton, D) takođe imaju tip kompleksnog broja koji obuhvata dva realna broja: realni deo i imaginarni deo.

Brojevi fiksne zapete[uredi | uredi izvor]

Broj fiksne zapete predstavlja racionalan broj ograničene preciznosti koji može imati frakcioni deo. Ovi brojevi se interno čuvaju u skalirano-celoj formi, oobično u binarnom sistemu, ali ponekad i u dekadnom sistemu. Zato što brojevi fiksnog zareza imaju ograničenu preciznost, samo podskupovi realnih ili racionalnih brojeva su potpuno predstavljeni; ostali brojevi mogu biti predstavljeni samo približno. Brojevi sa fiksnim zarezom takođe imaju tendenciju da imaju ograničeniji opseg vrednosti nego oni sa pokretnom zapetom, pa programer mora biti oprezan da izbegne prelivanje (rezultate koji izlaze iz opsega koji se mogu predstaviti) u međuračunu, kao i u konačnim rezultatima.

Znakovi i niske[uredi | uredi izvor]

Znakovni tip (obično char) može da sadrži jedano slovo, broj, interpukciski znak, simbol, kod formatiranja, kontrolni kod, ili neki drugi specijalni kod (npr oznaka naređenja bita). U C, char se definiše kao najmanja adresabilna jedinica memorije. U većini sistema ovo je 8 bita; Nekoliko standarda, poput Posiksa, zahtevaju da bude ove veličine. Neki jezici imaju dve ili više vrsta znakova, na primer jednobajtni tip za ASKI znakove i multibajtni tip Unikod znakova. Termin „tip znakova“ (engl. character type) se obično koristi čak i za tipove čije vrednosti preciznije predstavljaju kodovi jedinice, na primer UTF-16 kao kod jedinice u Javi and Javaskriptu.

Znakovi mogu da se kombinuju u niske. Podaci niski mogu da sadrže brojeve i druge numeričke simbole ali će se tretirati kao tekst.

Niske se implementiraju na različite načine, u zavisnosti od programskog jezika. Najjednostavniji način da se sprovede niska je da se stvori kao niz znakova, nakon čega će se koristiti ograničavajući znak da označi kraj niza, obično NUL. Ovakve niske se nazivaju niskama terminiranim nulom, i obično se koriste u jezicima sa malim nivoom hardverske apstrakcije (jezici bliži mašinskom jeziku), kao što su C i Asembler. Iako ih je lako implementirati, niske terminirane nulom imaju manu zbog opasnosti od prelivanja bafera. Većina skript jezika višeg nivoa, kao što su Pajton, Rubi, i mnogi dialekti Bejsika, nemaju poseban tip znakova; niske sa dužinom od jednog znaka obično se koriste za predstavljanje pojedinačnih znakova. Neki jezici, kao što su C++ i Java, imaju mogućnost da koriste niske terminirane nulama (obično zarad unazadne kompatibilnosti), ali dodatno obezbeđuju svoju klasu za rukovanje niskama (std::string i java.lang.String, redom) u svojim standardnim bibliotekama.

Takođe postoji razlika u tome da li su u jeziku niske promenljive ili nepromenljive. Promenljive niske se mogu menjati nakon njihovog stvaranja, dok nepromenljive niske održavaju konstantnu veličinu i sadržaj. U drugom slučaju, jedini način da se niska promeni je da se napravi nova niska. Postoje prednosti i mane oba pristupa: iako su nepromenljive niske mnogo manje fleksibilne, oni su jednostavnije i bezbedne u slučaju da se program izvršava u više niti. Neki primeri jezika koji koriste promenljive niske uključuju  C++, Perl i Rubi, dok su jezici koji ih ne koriste Javaskript, Lua, i Go. Mali broj jezika, kao što su Objektiv-C, pružaju različite tipove za promenljive i nepromenljive niske.

Literali za znakove i niske su obično okruženi navodnicima: ponekad se, jednostruki navodnici (') koriste za znakove a dupli navodnici (") za niske.

Primeri znakova literala u C sintaksi su:

Primeri niski literala u C sintaksi su::

  • "A"
  • "Zdravo svete"

Opsezi brojevnih tipova podataka[uredi | uredi izvor]

Svaki tip numeričkog podatka ima maksimalne i minimalne vrednosti poznate kao opseg. Pokušaj čuvanja broja izvan opsega može dovesti do grešaka bilo u vreme kompajliranja bilo u vreme izvršavanja, ili do pogrešnih rezultata (zbog skraćenja) u zavisnosti od jezika koji se koristi.

Opseg promenljive se zasniva na broju bajtova koji su se koristili za čuvanje vrednosti, i jedan celobrojni tip podataka obično može da čuva vrednosti (gde predstavlja broj bitova koje čine vrednost). Za ostale tipove podataka (npr vrednosti realnih brojeva) pitanje opsega je mnogo komplikovanije i varira u zavisnosti od načina njihovog skladištenja. Postoje i neke vrste koje ne koriste cele bajtove, na primer bul kome je potreban samo jedan bit, i predstavlja vrednost binarnog sistema (iako se u praksi često koristi bajt i tom prilikom je preostalih 7 bitova suvišno). Neki programski jezici (kao što su Ada i Paskal) takođe dozvoljavaju i suprotan pravac, to jest, programer definiše opseg i preciznost potrebnu da bi se rešio dati problem a prevodilac automatski bira najprikladniji ceo ili realan tip.

Vidi još[uredi | uredi izvor]

Reference[uredi | uredi izvor]