Tip podatka (računarstvo)

U računarstvu i programiranju, tip podataka (ili jednostavno tip) predstavlja skup ili grupu vrijednosti podataka, obično definisan skupom mogućih vrijednosti, skupom dozvoljenih operacija nad tim vrijednostima i/ili njihovom reprezentacijom kao mašinskih tipova.[1] Specifikacija tipa podataka u programu ograničava moguće vrijednosti koje neka izražajna jedinica, poput varijable ili poziva funkcije, može imati. Kada je riječ o literalnim podacima, ona govori kompajleru ili interpreteru kako programer namjerava koristiti te podatke. Većina programskih jezika podržava osnovne tipove podataka kao što su cijeli brojevi (različitih veličina), brojevi s pokretnim zarezom (koji aproksimiraju realne brojeve), karakteri i Booleove vrijednosti.[2]
Koncept
[uredi | uredi izvor]Tip podataka može biti definisan iz više razloga: radi sličnosti, praktičnosti ili usmjeravanja pažnje. Često je to pitanje dobre organizacije koja olakšava razumijevanje složenih definicija. Gotovo svi programski jezici eksplicitno uključuju pojam tipa podataka, iako su dostupni tipovi često ograničeni razmatranjima jednostavnosti, izračunljivosti ili pravilnosti. Eksplicitna deklaracija tipa podataka obično omogućava kompajleru da odabere efikasnu mašinsku reprezentaciju, ali konceptualna organizacija koju nude tipovi podataka ne bi trebala biti zanemarena.[3]
Različiti programski jezici mogu koristiti različite tipove podataka ili slične tipove s različitom semantikom. Na primjer, u programskom jeziku Python, tip int predstavlja cijeli broj s proizvoljnom preciznošću i podržava tradicionalne numeričke operacije poput sabiranja, oduzimanja i množenja. Međutim, u programskom jeziku Java, tip int predstavlja skup 32-bitnih cijelih brojeva u rasponu od −2.147.483.648 do 2.147.483.647, pri čemu se aritmetičke operacije pri prekoračenju opsega „obavijaju“ (wrap around). U jeziku Rust, ovaj 32-bitni cijeli broj označava se kao i32 i izaziva paniku pri prekoračenju opsega u režimu za debagovanje.[4]
Većina programskih jezika također omogućava programerima da definišu dodatne tipove podataka, obično kombinovanjem više elemenata drugih tipova i definisanjem validnih operacija za novi tip podataka. Na primjer, programer može kreirati novi tip podataka nazvan "kompleksni broj", koji bi sadržavao realni i imaginarni dio, ili tip podataka za boju, predstavljen s tri bajta koji označavaju količine crvene, zelene i plave boje, zajedno s nizom znakova koji predstavlja naziv boje.
Tipovi podataka koriste se unutar sistemâ tipova, koji nude različite načine njihovog definisanja, implementacije i upotrebe. U sistemu tipova, tip podataka predstavlja ograničenje u tumačenju podataka, opisujući njihovu reprezentaciju, interpretaciju i strukturu vrijednosti ili objekata pohranjenih u memoriji računara. Sistem tipova koristi informacije o tipu podataka za provjeru ispravnosti računalnih programa koji pristupaju ili manipulišu podacima.
Kompajler može koristiti statički tip neke vrijednosti kako bi optimizovao potrebnu memoriju za njeno skladištenje i odabrao odgovarajuće algoritme za operacije nad tom vrijednošću. Na primjer, u mnogim C kompajlerima tip float je predstavljen s 32 bita, u skladu s IEEE specifikacijom za brojeve s pokretnim zarezom jednostruke preciznosti. Zbog toga će kompajleri koristiti specifične operacije mikroprocesora za rad s brojevima s pokretnim zarezom, poput sabiranja i množenja.
U sljedećoj tabeli je prikazano da većina tipova podataka u statistici ima uporediv tip podataka u računarskom programiranju, također i obrnuto:
Statistika | Programiranje |
---|---|
realna vrijednost ( intervalna skala ) | floating-point |
realna vrijednost ( skala omjera ) | |
broj podataka (obično nenegativni) | cijeli broj |
binarni podaci | Boolean |
kategoričke podatke | nabrojani tip |
slučajni vektor | lista ili niz |
slučajna matrica | dvodimenzionalni niz |
nasumično drvo | drvo |
Definicija
[uredi | uredi izvor]Parnas, Shore i Weiss (1976) identificirali su pet definicija "tipa" koje su korištene—ponekad implicitno—u literaturi.
Sintaksa
[uredi | uredi izvor]Tip je isključivo sintakska oznaka pridružena varijabli prilikom deklaracije. Iako korisna za napredne sisteme tipova, poput substrukturalnih sistema tipova, ovakva definicija ne pruža intuitivno značenje tipova.
Reprezentacija
[uredi | uredi izvor]Tip je definisan kao sastav jednostavnijih tipova—često mašinskih tipova.
Reprezentacija i ponašanje
[uredi | uredi izvor]Tip je definisan svojom reprezentacijom i skupom operatora koji manipulišu tom reprezentacijom.
Prostor vrijednosti
[uredi | uredi izvor]Tip je skup mogućih vrijednosti koje neka varijabla može imati. Ovakve definicije omogućavaju rad s (disjunktnim) unijama ili Kartezijevim proizvodima tipova.
Prostor vrijednosti i ponašanje
[uredi | uredi izvor]Tip je skup vrijednosti koje varijabla može imati i skup funkcija koje se mogu primijeniti na te vrijednosti.
Definisanje tipova podataka u smislu njihove reprezentacije često se koristilo u imperativnim jezicima kao što su ALGOL i Pascal, dok se definisanje u smislu prostora vrijednosti i ponašanja koristilo u jezicima višeg nivoa, poput Simule i CLU. Tipovi koji uključuju ponašanje bliže su objektno orijentisanim modelima, dok bi se u modelu strukturiranog programiranja tipovi obično definisali bez pridruženog koda. Takve strukture nazivaju se obične stare podatkovne strukture (plain old data structures).
Klasifikacija
[uredi | uredi izvor]Tipovi podataka mogu se klasificirati prema nekoliko faktora:
- Primitivni tipovi podataka ili ugrađeni tipovi su tipovi koji su sastavni dio implementacije programskog jezika. Korisnički definirani tipovi podataka su neprimitivni tipovi. Na primjer, u Javi su numerički tipovi primitivni, dok su klase korisnički definirani tipovi.
- Vrijednost atomskog tipa je pojedinačna podatkovna stavka koja se ne može razložiti na manje komponente. Vrijednost složenog (kompozitnog) tipa ili agregatnog tipa predstavlja kolekciju podataka kojima se može pristupiti pojedinačno.[5] Na primjer, cijeli broj se obično smatra atomskim, iako se sastoji od niza bitova, dok je niz cijelih brojeva svakako složeni tip.
- Osnovni tipovi podataka ili fundamentalni tipovi definirani su aksiomatski, na temelju osnovnih pojmova, ili nabrajanjem njihovih elemenata. Generirani tipovi podataka ili izvedeni tipovi su određeni i djelimično definirani na osnovu drugih tipova podataka. Svi osnovni tipovi su atomski.[6] Na primjer, cijeli brojevi su osnovni tip definisan u matematici, dok je niz cijelih brojeva rezultat primjene generatora tipa niza na tip cijelih brojeva.
Terminologija varira—u literaturi se izrazi primitivni, ugrađeni, osnovni, atomski i fundamentalni često koriste naizmjenično.[7]
Primjeri
[uredi | uredi izvor]Tipovi mašinskih podataka
[uredi | uredi izvor]Svi podaci u računarima baziranim na digitalnoj elektronici predstavljeni su kao bitovi (alternativa 0 i 1) na najnižem nivou. Najmanja adresabilna jedinica podataka obično je grupa bitova koja se zove bajt (obično oktet, što je 8 bitova). Jedinica koju procesiraju instrukcije mašinskog koda zove se riječ (od 2011. godine, obično 32 ili 64 bita).
Tipovi podataka na mašinskom nivou omogućavaju detaljnu kontrolu nad hardverom, ali ovo također može otkriti detalje implementacije koji čine kod manje prenosivim. Stoga se tipovi na mašinskom nivou uglavnom koriste u sistemskom programiranju ili programskim jezicima niskog nivoa. U programskim jezicima višeg nivoa većina tipova podataka je apstrahirana tako da nemaju jezično definiranu mašinsku reprezentaciju. Na primjer, programski jezik C nudi tipove kao što su Boolean tipovi, cijeli brojevi, brojevi s pokretnim zarezom, itd., ali precizne bitne reprezentacije ovih tipova su definirane implementacijom. Jedini C tip s preciznom mašinskom reprezentacijom je char tip koji predstavlja bajt.[8]
Boolean tip
[uredi | uredi izvor]Boolean tip predstavlja vrijednosti tačno (true) i netačno (false). Iako su moguće samo dvije vrijednosti, češće se predstavljaju kao bajt ili riječ, a ne kao jedan bit, jer je potrebno više mašinskih instrukcija za pohranjivanje i dohvaćanje pojedinačnog bita. Mnogi programski jezici nemaju eksplicitni Boolean tip, umjesto toga koriste tip cijeli broj i tumače (na primjer) 0 kao netačno, a druge vrijednosti kao tačno. Boolean podaci se odnose na logičku strukturu kako se jezik tumači prema mašinskom jeziku. U ovom slučaju, Boolean 0 se odnosi na logičku netačnost (False). Tačno (True) je uvijek različito od nule, posebno jedan koji je poznat kao Boolean 1.
Numerički tipovi
[uredi | uredi izvor]Gotovo svi programski jezici nude jedan ili više tipova podataka za cijele brojeve. Oni mogu ili ponuditi mali broj unaprijed definisanih podtipova koji su ograničeni određenim opsezima (kao što su short i long te njihovi odgovarajući unsigned varijante u C/C++), ili omogućiti korisnicima da slobodno definiraju podopsege, poput 1..12 (npr. u Pascalu/Adi). Ako odgovarajući nativni tip ne postoji na ciljnoj platformi, kompajler će ga razložiti u kod koristeći tipove koji postoje. Na primjer, ako se na 16-bitnoj platformi zatraži 32-bitni cijeli broj, kompajler će ga tiho tretirati kao niz od dva 16-bitna cijela broja.
Tipovi podataka s pokretnim zarezom predstavljaju određene frakcijske vrijednosti (racionalne brojeve, matematički). Iako imaju unaprijed definirane granice za maksimalne vrijednosti i preciznost, ponekad se pogrešno nazivaju realnim brojevima (što podsjeća na matematičke realne brojeve). Tipično su pohranjeni interno u formi (gdje su a i b cijeli brojevi), ali se prikazuju u poznatom decimalnom obliku.
Tipovi podataka s fiksnim zarezom su pogodni za predstavljanje novčanih vrijednosti. Često se interno implementiraju kao cijeli brojevi, što dovodi do unaprijed definiranih granica.
Za neovisnost o arhitektonskim detaljima, može biti ponuđen Bignum ili tip podataka s proizvoljnom preciznošću. Ovaj tip predstavlja cijeli broj ili racionalni broj s preciznošću koja je ograničena samo dostupnom memorijom i računalnim resursima sistema. Implementacije Bignum operacija nad vrijednostima odgovarajuće veličine mašinskog tipa znatno su sporije od odgovarajućih mašinskih operacija.[9]
Enumerisani tip
[uredi | uredi izvor]Enumerisani tip ima različite vrijednosti koje se mogu uspoređivati i dodeljivati, ali koje ne moraju nužno imati specifičnu konkretno reprezentaciju u računarskoj memoriji; kompajleri i interpretatori ih mogu predstavljati proizvoljno. Na primjer, četiri boje u špilu karata mogu biti četiri enumerisane vrijednosti nazvane CLUB, DIAMOND, HEART, SPADE, koje pripadaju enumerisanom tipu pod imenom suit. Ako je varijabla V deklarisana sa suit kao tipom podataka, može joj se dodijeliti bilo koja od tih četiri vrijednosti. Neke implementacije omogućavaju programerima da dodeljuju cijele brojeve enumeriranim vrijednostima, ili čak tretiraju te vrijednosti kao tipovima ekvivalentne cijelim brojevima.
String i tekstualni tipovi
[uredi | uredi izvor]Nizovi karaktera su sekvence karaktera koje se koriste za pohranu riječi ili običnog teksta, najčešće u tekstualnim označivačkim jezicima koji predstavljaju formatirani tekst. Karakteri mogu biti slovo nekog alfabeta, cifra, razmak, interpunkcijski znak itd. Karakteri se uzimaju iz skupa karaktera poput ASCII ili Unicode. Tipovi karaktera i nizova karaktera mogu imati različite podtipove u zavisnosti od kodiranja karaktera. Originalni 7-bitni ASCII je bio ograničen, pa je zamijenjen 8, 16 i 32-bitnim skupovima, koji mogu kodirati širok spektar nelatinskih alfabetâ (kao što su hebrejski i kineski) i drugih simbola. Nizovi karaktera mogu biti promjenjive dužine ili fiksne dužine, a neki programski jezici podržavaju oba tipa. Takođe, mogu biti podtipizirani prema svojoj maksimalnoj veličini.
Pošto većina skupova karaktera uključuje cifre, moguće je imati numerički niz karaktera, poput "1234". Ovi numerički nizovi obično se smatraju različitim od numeričkih vrijednosti poput 1234, iako neki programski jezici automatski vrše konverziju između njih.
Tipovi unije
[uredi | uredi izvor]Definicija unije tipa specificira koji od dozvoljenih podtipova može biti pohranjen u njenim instancama, npr. "float ili cijeli broj". U suprotnosti s zapisom (record), koji bi mogao biti definisan da sadrži i float i cijeli broj, unija može sadržavati samo jedan podtip u isto vrijeme.
Označena unija (takođe nazvana varijanta, varijantni zapis, diskriminisana unija ili disjunktna unija) sadrži dodatno polje koje označava njen trenutni tip, čime se poboljšava sigurnost tipa. Ovo omogućava da se tačno odredi koji tip podataka je trenutno pohranjen u uniji, čime se smanjuje mogućnost grešaka pri radu sa podacima.
Algebarski tipovi podataka
[uredi | uredi izvor]Algebrski tip podataka (ADT) je moguće rekurzivni suma tip sastavljen od tipova proizvoda. Vrijednost ADT tipa se sastoji od tag-a konstruktora zajedno sa nula ili više polja, pri čemu su broj i tip tih polja fiksirani konstruktorom. Skup svih mogućih vrijednosti ADT tipa predstavlja skupno-teorijsku disjunktnu uniju (suma) skupova svih mogućih vrijednosti njegovih varijanti (proizvod polja). Vrijednosti algebrskih tipova analiziraju se pomoću pobudnog upodavanja (pattern matching), koji identifikuje konstruktor vrijednosti i izdvaja polja koja ona sadrži.
Ako postoji samo jedan konstruktor, tada ADT odgovara tipu proizvoda sličnom nizu ili zapisu. Konstruktor bez polja odgovara praznom proizvodu (tipu jedinice). Ako svi konstruktori nemaju polja, tada ADT odgovara enumerisanom tipu.
Jedan od čestih ADT tipova je option tip, definisan u Haskell-u kao data Maybe a = Nothing | Just a.[10]
Struktura podataka
[uredi | uredi izvor]Neki tipovi su vrlo korisni za pohranu i dohvat podataka i nazivaju se strukture podataka. Uobičajene strukture podataka uključuju:
- Niz (koji se naziva i vektor, lista ili sekvenca) pohranjuje niz elemenata i pruža nasumični pristup pojedinačnim elementima. Elementi niza obično (ali ne u svim kontekstima) moraju biti istog tipa. Nizovi mogu biti fiksne dužine ili proširivi. Obično se traži da indeksi u nizu budu cijeli brojevi (ako ne, ovo opuštanje se može naglasiti govoreći o asocijativnom nizu ) iz određenog raspona (ako svi indeksi u tom rasponu ne odgovaraju elementima, to može biti rijetki niz ).
- Zapis (koji se naziva i tuple ili struktura) Zapisi su među najjednostavnijim strukturama podataka . Zapis je vrijednost koja sadrži druge vrijednosti, obično u fiksnom broju i nizu i obično indeksirane imenima. Elementi zapisa se obično nazivaju poljima ili članovima .
- Objekt sadrži brojna polja podataka, kao što je zapis, a također nudi niz potprograma za pristup ili modificiranje, koji se nazivaju metode .
- jednostruko povezana lista, koja se može koristiti za implementaciju reda i definirana je u Haskell-u kao ADT data List a = Nil | Cons a ( List a ), i
- binarno stablo, koje omogućava brzo pretraživanje, a može se definirati u Haskell-u kao ADT data BTree a = Nil | Node ( BTree a ) a ( BTree a ) [11]
Apstraktni tipovi podataka
[uredi | uredi izvor]Apstraktni tip podataka je tip podataka koji ne specificira konkretan način reprezentacije podataka. Umjesto toga, koristi se formalna specifikacija zasnovana na operacijama tipa podataka za njegovo opisivanje. Svaka implementacija specifikacije mora ispuniti zadana pravila. Na primjer, stog (stack) ima operacije push/pop koje slijede pravilo Last-In-First-Out (LIFO), a može biti konkretno implementiran pomoću liste ili niza. Apstraktni tipovi podataka koriste se u formalnoj semantici i verifikaciji programa, a manje strogo u dizajnu.
Pokazatelji i reference
[uredi | uredi izvor]Glavni nekombinovani, izvedeni tip je pokazivač (pointer), tip podataka čija vrijednost direktno upućuje na (ili "pokazuje") drugu vrijednost pohranjenu na drugom mjestu u računalnoj memoriji koristeći njen adresu. To je primitivni oblik referenciranja. (U svakodnevnom jeziku, broj stranice u knjizi može se smatrati podatkom koji upućuje na drugi podatak). Pokazivači se često pohranjuju u formatu sličnom cijelom broju; međutim, pokušaj dereferenciranja ili "pronalaska" pokazivača čija vrijednost nikada nije bila validna memorijska adresa izazvao bi pad programa. Da bi se ublažio ovaj potencijalni problem, tip pokazivača obično se smatra različitim od odgovarajućeg cijelog broja, čak i ako je osnovna reprezentacija ista.
Tipovi funkcija
[uredi | uredi izvor]Jezici funkcionalnog programiranja tretiraju funkcije kao različit tip podataka i omogućavaju da vrijednosti ovog tipa budu pohranjene u varijablama i proslijeđene u funkcije. Neki multi-paradigmatski jezici, poput JavaScript-a, također imaju mehanizme za tretiranje funkcija kao podataka.[12] Većina savremenih sistema tipova ide dalje od jednostavnog tipa "objekt funkcije" u JavaScript-u i ima skup tipova funkcija koji se razlikuju prema tipovima argumenata i povratnih vrijednosti, kao što je tip Int -> Bool, koji označava funkcije koje uzimaju cijeli broj i vraćaju Booleov tip. U C jeziku, funkcija nije tip podataka prvog reda, ali pokazivači funkcija mogu biti manipulisani od strane programa. Java i C++ prvobitno nisu imale funkcijske vrijednosti, ali su ih dodali u C++11 i Java 8.
Konstruktori tipa
[uredi | uredi izvor]Konstruktor tipa gradi nove tipove od postojećih i može se smatrati operatorom koji uzima nula ili više tipova kao argumente i proizvodi novi tip. Tipovi proizvoda, tipovi funkcija, tipovi stepena i tipovi lista mogu se koristiti kao konstruktori tipova.
Kvantificirani tipovi
[uredi | uredi izvor]Univerzalna kvantifikacija i egzistencijalna kvantifikacija tipova zasnivaju se na predikatnoj logici.
- Univerzalna kvantifikacija piše se kao: ili
forall x. fx
i predstavlja presjek svih tipova x tijelafx
, tj. vrijednost je tipafx
za svakix
. - Egzistencijalna kvantifikacija piše se kao ili
exists x. fx
i predstavlja uniju svih tipova x tijelafx
, tj. vrijednost je tipafx
za nekix
.
U Haskell-u, univerzalna kvantifikacija se često koristi, ali egzistencijalni tipovi moraju biti kodirani transformacijom exists a. f a
u forall r. (forall a. f a -> r) -> r
ili sličan tip.
Ova transformacija omogućava simulaciju egzistencijalnih tipova u Haskell-u, jer je univerzalna kvantifikacija podržana nativno, dok egzistencijalni tipovi zahtijevaju dodatnu apstrakciju pomoću viših funkcija i univerzalnih kvantifikacija.
Refinirani tip
[uredi | uredi izvor]Refinirani tip je tip koji je obogaćen predikatom za koji se pretpostavlja da vrijedi za bilo koji element refiniranog tipa. Na primjer, tip prirodnih brojeva većih od 5 može se napisati kao:
{ n ∈ ℕ | n > 5 }
Ovaj zapis znači da je tip svih prirodnih brojeva koji zadovoljavaju uvjet n > 5. Refinirani tipovi omogućavaju dodatne specifikacije i restrikcije na tipove, čime poboljšavaju preciznost i sigurnost u programiranju.
Zavisni tipovi
[uredi | uredi izvor]Zavisni tip je tip čija definicija zavisi od vrijednosti. Dva česta primjera zavisnih tipova su zavisne funkcije i zavisne parove.
- Zavisna funkcija: Tip povratne vrijednosti zavisi od vrijednosti (ne samo tipa) jednog od njenih argumenata. Na primjer, tip povratne vrijednosti može zavisiti od specifične vrijednosti koju funkcija prima kao argument.
- Zavisni par: Zavisni par može imati drugi element čiji tip zavisi od prvog elementa. Na primjer, prvi element može biti broj, a tip drugog elementa može zavisiti od tog broja.
Zavisni tipovi omogućavaju veću fleksibilnost u definiranju tipova koji su precizno vezani za konkretne vrijednosti, čime se povećava snaga tipa sistema i sigurnost programa.
Presjek tipova
[uredi | uredi izvor]Presek tipova je tip koji sadrži one vrijednosti koje su članovi dva specifična tipa. Na primjer, u Javi, klasa Boolean implementira i Serializable i Comparable interfejse. Dakle, objekat tipa Boolean je član tipa Serializable & Comparable.
Razmatrajući tipove kao skupove vrijednosti, presek tipova 𝜎 ∩ 𝜏 je skup-teoretski presek tipova 𝜎 i 𝜏.
Takođe, moguće je definisati zavisni presek tipova, označen kao (x: 𝜎) ∩ 𝜏, gdje tip 𝜏 može zavisiti od varijable x.[13] Ovo omogućava veću fleksibilnost u definisanju tipova koji zavise od specifičnih vrijednosti, kao i u preciznijem modeliranju složenih veza između tipova.
Meta tipovi
[uredi | uredi izvor]Neki programski jezici predstavljaju informacije o tipovima kao podatke, omogućavajući introspekciju tipova i reflektivno programiranje (refleksija). To znači da je moguće analizirati i manipulirati tipovima tokom izvođenja programa, često za potrebe dinamičke provjere tipova ili generičkog kodiranja.
Tipovi praktičnosti
[uredi | uredi izvor]Za praktičnost, visoko-nivojski jezici i baze podataka mogu ponuditi unaprijed definisane "realne" tipove podataka, kao što su vremenski i datum tipovi, kao i novčane vrijednosti (valute).[14][15] Ovi tipovi mogu biti ugrađeni u jezik ili implementirani kao kompozitni tipovi u biblioteci.[16]
Na primjer, mnogi jezici imaju podršku za rad s vremenom i datumima, olakšavajući rad s vremenskim zonama, formatima datuma i vremenskim operacijama. Takođe, specifični tipovi za valute omogućavaju precizno upravljanje novčanim vrijednostima, uključujući operacije kao što su zbrajanje, oduzimanje i formatiranje s tačnošću za decimale.
Također pogledati
[uredi | uredi izvor]- C tipovi podataka
- Rječnik podataka
- Vrsta (teorija tipova)
- Tip (teorija modela)
- Teorija tipova za matematičke modele tipova
- Konverzija tipova
- ISO/IEC 11404, Tipovi podataka opće namjene
Reference
[uredi | uredi izvor]- ^ Parnas, Shore i Weiss 1976.
- ^ Shaffer, C. A. (2011). Data Structures & Algorithm Analysis in C++ (3rd izd.). Mineola, NY: Dover. 1.2. ISBN 978-0-486-48582-9.
- ^ Scott, Dana (septembar 1976). "Data Types as Lattices". SIAM Journal on Computing. 5 (3): 540–541. doi:10.1137/0205037.
- ^ "Rust RFCs - Integer Overflow". The Rust Programming Language. 12. 8. 2022.
- ^ Dale, Nell B.; Weems, Chip; Headington, Mark R. (1998). Programming in C++ (jezik: engleski). Jones & Bartlett Learning. str. 349. ISBN 978-0-7637-0537-4.
- ^ ISO/IEC 11404, 6.4
- ^ BHATNAGAR, SEEMA (19. 8. 2008). TEXTBOOK OF COMPUTER SCIENCE FOR CLASS XI (jezik: engleski). PHI Learning Pvt. Ltd. str. 182. ISBN 978-81-203-2993-5.
- ^ "SC22/WG14 N2176" (PDF). Wayback Machine. Section 6.2.6.2. Arhivirano s originala (PDF), 30. 12. 2018.
Which of [sign and magnitude, two's complement, one's complement] applies is implementation-defined
- ^ "Integer benchmarks — mp++ 0.27 documentation". bluescarni.github.io.
- ^ "6 Predefined Types and Classes". www.haskell.org. Pristupljeno 15. 6. 2022.
- ^ Suresh, S P. "Programming in Haskell: Lecture 22" (PDF). Chennai Mathematical Institute. Pristupljeno 10. 8. 2022.
- ^ Flanagan, David (1997). "6.2 Functions as Data Types". JavaScript: the definitive guide (2nd izd.). Cambridge: O'Reilly & Associates. ISBN 9781565922341.
- ^ Kopylov, Alexei (2003). "Dependent intersection: A new way of defining records in type theory". 18th IEEE Symposium on Logic in Computer Science. LICS 2003. IEEE Computer Society. str. 86–95. CiteSeerX 10.1.1.89.4223. doi:10.1109/LICS.2003.1210048.
- ^ West, Randolph (27. 5. 2020). "How SQL Server stores data types: money". Born SQL. Pristupljeno 28. 1. 2022.
Some time ago I described MONEY as a “convenience” data type which is effectively the same as DECIMAL(19,4), [...]
- ^ "Introduction to data types and field properties". support.microsoft.com. Pristupljeno 28. 1. 2022.
- ^ Wickham, Hadley (2017). "16 Dates and times". R for data science: import, tidy, transform, visualize, and model data. Sebastopol, CA. ISBN 978-1491910399. Pristupljeno 28. 1. 2022.
Dalje čitanje
[uredi | uredi izvor]- Parnas, David L.; Shore, John E.; Weiss, David (1976). "Abstract types defined as classes of variables". Proceedings of the 1976 conference on Data : Abstraction, definition and structure -. str. 149–154. doi:10.1145/800237.807133.
- Cardelli, Luca; Wegner, Peter (decembar 1985). "On Understanding Types, Data Abstraction, and Polymorphism" (PDF). ACM Computing Surveys. 17 (4): 471–523. doi:10.1145/6041.6042. ISSN 0360-0300. Arhivirano s originala (PDF), 3. 12. 2008.
- Cleaveland, J. Craig (1986). An Introduction to Data Types. Addison-Wesley. ISBN 978-0201119404.
Vanjski linkovi
[uredi | uredi izvor]Tip podatka (računarstvo) na Wikimedia Commonsu