Prof. dr Miroslav Trajanović Računarski jezici Prof. dr Miroslav Trajanović Mašinski fakultet u Nišu Osnove programiranja
STRUKTURA RAČUNARSKIH SISTEMA Mašinski fakultet u Nišu Osnove programiranja
Struktura tehničkog sistema Mašinski fakultet u Nišu Osnove programiranja
Pojam kodiranja Računar interno koristi binarni brojni sistem, jer njegova logika poznaje samo dva moguća stanja: uklučeno (1) i isključeno (0). Pošto postoji potreba da se obrađuju različiti simboli (cifre , slova, znaci) bilo je potrebno razraditi sistem interne reprezentacije ovih simbola u računaru. Da bi se obezbedila jednoznačnost, uvode se pravila kodiranja podataka u binarni sistem. Binarno kodiranje je postupak kojim se simbol zamenjuje nizom bitova po strogo propisanom sistemu kodiranja. POJAM KODIRANJA Poznato je da računar interno koristi binarni brojni sistem, jer njegova logika poznaje samo dva moguća stanja: uklučeno (1) i isključeno (0). Pošto postoji potreba da se obrađuju različiti simboli (cifre , slova, znaci) bilo je potrebno razraditi sistem interne reprezentacije ovih simbola u računaru. To je postignuto time što se svaki simbol prikazuje nizom nula i jedinica, tj. nizom bitova. Da bi se obezbedila jednoznačnost, uvode se pravila kodiranja podataka u binarni sistem. Binarno kodiranje je postupak kojim se simbol zamenjuje nizom bitova po strogo propisanom sistemu kodiranja. Postoje različiti sistemi kodiranja i za različite namene. Ovde će biti predstavljeni samo najvažniji sistemi kodiranja numeričkih i alfanumeričkih simbola i podataka. Mašinski fakultet u Nišu Osnove programiranja
Reprezentacija celih brojeva Celi brojevi (engleski integers) mogu biti sa ili bez znaka. Interna reprezentacija celih brojevi bez znaka odgovara binarnoj reprezentaciji broja. Najznačajniji bit (prvi sa leva) se koristi za kodiranje znaka. Po konvenciji bit znaka (engleski sign bit) je 0 ako je broj pozitivan i 1 ako je broj negativan. Metode za kodiranje celih brojeva sa znakom su: Magnituda sa znakom, Komplement jedinice, Komplement dvojke. Danas gotovo isključivo koristi metod komplementa dvojke. REPREZENTACIJA CELIH BROJEVA Celi brojevi (engleski integers) mogu biti sa ili bez znaka. Celi brojevi bez znaka su po definiciji pozitivni i nazivaju se prirodni brojevi. Koriste se za definisanje broja komada nekog entiteta u skupu ili za kao redni brojevi. Celi brojevi bez znaka su ne-negativni brojevi i njihova interna reprezentacija odgovara binarnoj reprezentaciji broja. Celi brojevi sa znakom mogu biti pozitivni ili negativni. Ovde je pored broja potrebno kodirati i znak. Postoje tri metode kodiranja celih brojeva sa znakom. Sve tri metode koriste najznačajniji bit (prvi sa leva) za kodiranje znaka. Po konvenciji bit znaka (engleski sign bit) je 0 ako je broj pozitivan i 1 ako je broj negativan. Metode za kodiranje celih brojeva sa znakom su: Magnituda sa znakom, Komplement jedinice, Komplement dvojke. Prva dva metoda su se koristila u ranim danima računarske tehnike, dok se danas gotovo isključivo koristi metod komplementa dvojke. Mašinski fakultet u Nišu Osnove programiranja
Magnituda sa znakom Reprezentacija broja se sastoji od dva dela: znaka i magnitude broja. Za znak je odvojen jedan bit, a ostali bitovi prestavljaju magnitudu u binarnoj reprezentaciji. Primer broj +5610 = 00111000, a negativni broj -56 = 10111000. Nedostaci: Javljaju se dva moguća koda za nulu, +0 (00000000) i -0 (10000000), Sabiranje pozitivnog i negativnog broja nije moguće izvesti, nego se operacija mora preurediti na oduzimanje magnitude negativnog broja od pozitivnog. Magnituda sa znakom je najjednostavniji metod kodiranja celih brojeva sa znakom. Reprezentacija broja se sastoji od dva dela: znaka i magnitude broja. Za znak je odvojen jedan bit, a ostali bitovi prestavljaju magnitudu u binarnoj reprezentaciji. Na primer decimalni broj +56 u ovoj reprezentaciji ima oblik 00111000, a negativni broj -56 oblik 10111000. Najveći pozitivan decimalni broj koji može da se memoriše u jednom bajtu je +127, a najveći negativan broj je -127. Iako je jednostavan ovaj metod se reko koristi jer ima neke nedostatke. Najpre, javljaju se dva moguća koda za nulu, +0 (00000000) i -0 (10000000), što znatno komplikuje logiku centralne procesorske jedinice. Takođe, sabiranje pozitivnog i negativnog broja nije moguće izvesti, nego se operacija mora preurediti na oduzimanje magnitude negativnog broja od pozitivnog. Ovo takođe komlikuje logiku rada procesora. Mašinski fakultet u Nišu Osnove programiranja
Komplement jedinice Komplement jedinice nekog binarnog broja se dobija tako što svi bitovi koji su bili 0 postaju 1, a svi koji su bili 1 postaju 0. Primer: komplement jedinice binarnog broja 1001 je 0110. Prvi bajt predstavlja znak broja. Magnituda pozitivnih brojeva odgovara binarnoj reprezentaciji magnitude. Magnituda negativnih brojeva se dobija kao komplement jedinice binarne reprezentacije magnitude. Primer, broj +5110 ima reprezentaciju 00110011, a broj -5110 11001100. Kodiranje negativnih celih brojeva komplementom jedinice opisano je izrazom: -X = not(X) Komplement jedinice nekog binarnog broja se dobija tako što svi bitovi koji su bili 0 postaju 1, a svi koji su bili 1 postaju 0. Na primer komplement jedinice binarnog broja 1001 je 0110. I u slučaju reprezentacije metodom komplementa jedinice prvi bajt predstavlja znak broja. Magnituda pozitivnih brojeva odgovara binarnoj reprezentaciji magnitude. Magnituda negativnih brojeva se dobija kao komplement jedinice binarne reprezentacije magnitude. Na primer, decimalni broj +51 ima reprezentaciju 00110011, a broj -51 ima 11001100. Kodiranje negativnih celih brojeva komplementom jedinice opisano je izrazom: -X = not(X) Treba primetiti da se procedurom komplementiranja automatski menja i bit znaka broja. Metod komplementa jedinice ima iste nedostatke kao i metod magnitude sa znakom. Mašinski fakultet u Nišu Osnove programiranja
Komplement dvojke Komplement dvojke nekog binarnog broja nalazi se po sledećoj proceduri: Odredi se komplement jedinice datog binarnog broja Doda se jedinica rezultatu iz prvog koraka. Procedura nalaženja komplementa dvojke će biti prikazana na primeru broja 5610 Komplement dvojke nekog binarnog broja nalazi se po sledećoj proceduri: Odredi se komplement jedinice datog binarnog broja Doda se jedinica rezultatu iz prvog koraka. Procedura nalaženja komplementa dvojke će biti prikazana na primeru decimalnog broja 56 Binarni broj 00111000 Komplement jedinice 11000111 Sabiranje sa 1 +1 Komplement dvojke 11001000 Mašinski fakultet u Nišu Osnove programiranja
Komplement dvojke Reprezentacija negativnih brojeva dobija se tako što se nađe komplement dvojke datog pozitivnog broja. Primer: -5610 = 11001000 Kodiranje negativnih celih brojeva komplementom dvojke opisano je izrazom: -X = not(X) + 1 U slučaju reprezentacije celih brojeva sa znakom postoji samo jedan kod za 010 čiji je kod 00000000, pa se jednim bajtom mogu reprezentovati brojevi od -128 do +127. Reprezentacija negativnih brojeva se po ovoj reprezentaciji dobija tako što se nađe komplement dvojke datog pozitivnog broja. U ovom slučaju je broj 11001000 reprezentacija decimalnog broja -56. Ako se izvrše dve uzastopne negacije i po ovom metodu će se dobiti početni broj. Kodiranje negativnih celih brojeva komplementom dvojke opisano je izrazom: -X = not(X) + 1 U slučaju reprezentacije celih brojeva sa znakom postoji samo jedan kod za decimalni broj 0 čiji je kod 00000000, pa se jednim bajtom mogu reprezentovati brojevi od -128 do +127. Mašinski fakultet u Nišu Osnove programiranja
BCD (Binary Coded Decimal) kodiranje Decimalni broj NBC BCD Exces-3 Gray 0000 0011 1 0001 0100 2 10 0010 0101 11 3 0110 4 100 0111 110 5 101 1000 111 6 1001 7 1010 8 1011 1100 9 1101 Pored prethodna tri, za reprezentaciju celih brojeva se koristi i metod binarnog kodiranja decimalnih brojeva ili BCD (Binary Coded Decimal) kodiranje. Najpoznatiji BCD kodovi su: 8421 BCD, Excess-3 i Gray-ov kod. U ovom slučaju je potrebno kodirati decimalne cifre od nula do devet. Kodiranje se vrši tako što se svaka cifra decimalnog broja predstavlaja sa četiri bita. Koja će kombinacija bitova predstavljati neku decimalnu cifru zavisi od izabrane šeme kodiranja. U tabeli su prikazani različiti kodovi za cifre decimalnog sistema. Mašinski fakultet u Nišu Osnove programiranja
Primer 8421 BCD kod Decimalno 8421 BCD 2 5 7 9 0010 0101 0111 1001 BCD kodovi su manje ekonomičan od binarne reprezentacije broja. Na primer, sa 8 bita je moguće predstaviti cele nenegativne brojeve u intervalu od 0 do 255, a u BCD kodu samo od 0 do 99. U radu sa 8421 BCD kodom se javljaju problemi pri operacijama sabiranja i oduzimanja, pa se zbog toga često koristi Excess-3 kod. Grey-ov kod se uglavnom koristi kod računara i merne opreme koja je namenjena akviziciji podataka. Najčešće se koristi standardni 8421 BCD kod, koji je istovetan sa binarnom prezentacijom cifara. Tako, na primer, decimalni broj 2579 u 8421 BCD kodu ima oblik koji je prikazan na slajdu. Ovaj kod je, kao i ostali BCD kodovi, manje ekonomičan od binarne reprezentacije broja. Na primer, sa 8 bita je u binarnom zapisu moguće predstaviti cele nenegativne brojeve u intervalu od 0 do 255, a u BCD kodu samo od 0 do 99. Razlog za njegovo korišćenje leži u činjenici da je olakšana komunikacija između čoveka i računara, jer se pojedine cifre mogu lakše dekodirati nego ceo broj. U radu sa 8421 BCD kodom se javljaju problemi pri operacijama sabiranja i oduzimanja, pa se zbog toga često koristi Excess-3 kod. Grey-ov kod se uglavnom koristi kod računara i merne opreme koja je namenjena akviziciji podataka. Ovaj kod se u industrijskoj praksi pokazao najpouzdaniji zbog toga što se prilikom promene vrednosti broja za jedan uvek menja samo po jedan bit u kodu. Mašinski fakultet u Nišu Osnove programiranja
Reprezentacija realnih brojeva Računari koriste racionalne (razlomljene) brojeve koji se u računarskoj tehnici nazivaju realni brojevi. Reprezentacija sa pokretnim zarezom (floating point). Sistem sa pokretnim zarezom se bazira na zapisu koji se naziva naučna notacija. Primer: decimalni broj 2349,625 se može prikazati kao 23,49625 * 102 234,9625 * 101 23496,25 * 10-1 Da bi se izbegle zabune brojevi u naučnoj notaciji se prikazuju u normalizovanom obliku, u kome celobrojni deo ima samo jednu cifru, a sve ostale cifre su iza zareza. Normalizovan oblik 2,349625 * 103 Računari koriste racionalne (razlomljene) brojeve koji se u računarskoj tehnici nazivaju realni brojevi. Kako ovi brojevi mogu da imaju različit broj cifara ispred i iza zareza, razvijen je sistem reprezentacije koji se naziva reprezentacija sa pokretnim zarezom (floating point). U domaćoj literaturi se umesto izraza pokretni koriste i izrazi plivajući ili klizni, a umesto izraza zarez koristi se izraz tačka, što je bliže originalnom engleskom nazivu. Reprezentacija sa pokretnim zarezom se koristi i za reprezentaciju vrlo velikih celih brojeva sa znakom. Sistem sa pokretnim zarezom se bazira na zapisu koji se naziva naučna notacija. Isti broj se može predstaviti na različite načine. Na primer, decimalni broj 2349,625 ima celobrojni deo opisan sa 4 cifre i decimalni deo opisan sa 3 cifre. Međutim u reprezentaciji sa pokretnim zarezom on može biti zapisan i kao: 23,49625 * 102 234,9625 * 101 23496,25 * 10-1 ili na neki sličan način. U svim slučajevima vrednost broja je ista. Kao što se iz prethodnog primera vidi zarezu je moguće menjati mesto (otuda naziv pokretni zarez) u odgovarajuću promenu eksponenta. Da bi se izbegle zabune brojevi u naučnoj notaciji se prikazuju u normalizovanom obliku, u kome celobrojni deo ima samo jednu cifru, a sve ostale cifre su iza zareza. Broj iz prethodnog primera u normalizovanom obliku ima sledeću formu: 2,349625 * 103 Mašinski fakultet u Nišu Osnove programiranja
Opšti slučaj decimalnog broja u normalizovanom obliku ± M * 10E M – mantisa E – eksponent Mantisa se može razložiti na celobrojni deo C i decimalni deo D, pri čemu je celobrojni deo C jedna cifra koja mora biti u intervalu 1 ≤ C ≤ 9. Jedini izuzetak od ovog pravila je broj nula. Broj cifara koje sadrži mantisa definišu preciznost kojom broj opisuje neku vrednost. Ove cifre se nazivaju značajne cifre. Primer: vrednost izraza 1/3 se može zapisati kao 3,33* 10-1 ili kao 3.3333 * 10-1. U prvom slučaju preciznost je 3 značajne cifre, a u drugom 5. U opštem slučaju, bilo koji decimalni broj u normalizovanom obliku se može napisati kao: ± M puta 10 na E Gde je: M – mantisa E – eksponent, koji može biti nula ili bilo koji pozitivan ili negativan ceo broj. Mantisa se može razložiti na celobrojni deo C i decimalni deo D, pri čemu je celobrojni deo C jedna cifra koja mora biti u intervalu 1 ≤ C ≤ 9. Jedini izuzetak od ovog pravila je broj nula. Broj cifara koje sadrži mantisa definišu preciznost kojom broj opisuje neku vrednost. Ove cifre se nazivaju značajne cifre. Na primer, vrednost izraza 1/3 se može zapisati kao 3,33* 10-1 ili kao 3.3333 * 10-1. U oba slučaja je vrednost 1/3 približno definisana, obzirom da rezultat nema konačan broj cifara. U prvom slučaju preciznost je 3 značajne cifre, a u drugom 5. Mašinski fakultet u Nišu Osnove programiranja
Realni brojevi se u binarnom brojnom sistemu i - pozicija cifre levo od decimalnog znaka j - pozicija cifre desno od decimalnog znaka n - broj cifara celobrojnog dela broja m - broj cifara decimalnog dela broja ai - cifra na i-toj poziciji ulevo od decimalnog znaka aj - cifra na j-toj poziciji udesno od decimalnog znaka. Realni brojevi se u binarnom brojnom sistemu mogu prikazati na sličan način. Vrednost nekog realnog binarnog broja može se izračunati po izrazu prikazanom na slajdu. gde je: i - pozicija cifre levo od decimalnog znaka j - pozicija cifre desno od decimalnog znaka n - broj cifara celobrojnog dela broja m - broj cifara decimalnog dela broja ai - cifra na i-toj poziciji ulevo od decimalnog znaka aj - cifra na j-toj poziciji udesno od decimalnog znaka. Mašinski fakultet u Nišu Osnove programiranja
Težine cifara levo od decimalnog znaka Pozicija cifre levo od decimalnog znaka 1 2 3 4 5 ... Težina 2-1 2-2 2-3 2-4 2-5 1/2 1/4 1/8 1/16 1/32 0.5 0.25 0.125 0.0625 0.03125 Težine cifara levo od decimalnog znaka imaju vrednost kao u tabeli Mašinski fakultet u Nišu Osnove programiranja
Konverzija decimalnog realnog broja u binarni Posebno se konvertuju celobrojni i decimalni deo. Celobrojni deo broja se konvertuje u binarni broj metodom koji se normalno koristi za cele brojeve. Decimalni deo, koji ima opšti oblik 0,abcde..., se konvertuje prema sledećem algoritmu: Decimalni broj 0,abcde se množi sa 2 i dobija se rezultat oblika p,qrstu Cifra p postaje prva decimalna cifra binarne reprezentacije i ona se otklanja iz broja Ostatak 0,qrstu se ponovo množi sa 2 kako bi se dobila sledeća decimalna cifra binarnog broja Koraci 2 i 3 se ponavljaju sve dok ostatak ne bude nula ili dok se ne postigne željena preciznost. Konverzija decimalnog realnog broja u binarni se vrši tako što se posebno konvertuju celobrojni i decimalni deo. Celobrojni deo broja se konvertuje u binarni broj metodom koji se normalno koristi za cele brojeve. Decimalni deo, koji ima opšti oblik 0,abcde..., se konvertuje prema sledećem algoritmu: Decimalni broj 0,abcde se množi sa 2 i dobija se rezultat oblika p,qrstu Cifra p postaje prva decimalna cifra binarne reprezentacije i ona se otklanja iz broja Ostatak 0,qrstu se ponovo množi sa 2 kako bi se dobila sledeća decimalna cifra binarnog broja Koraci 2 i 3 se ponavljaju sve dok ostatak ne bude nula ili dok se ne postigne željena preciznost. Mašinski fakultet u Nišu Osnove programiranja
Primer konverzije broja 0,2875 Korak Množenje sa 2 Rezultat Binarna cifra 1 0,2875 * 2 0,575 2 0,575 * 2 1,15 3 0,15 * 2 0,30 4 0,30 * 2 0,60 5 0,60 * 2 1,2 6 0,2 * 2 0,4 7 0,4 * 2 0,8 8 0,8 * 2 1,6 9 0,6 * 2 0,287510 ~ 0,0100100112 Radi ilustracije ovog algoritma, prikazuje se postupak konverzije decimalnog broja 0,2875 u binarni oblik. Procedura je prikazana u tabeli. Postupak konverzije je prekinut posle 9 koraka iako je ostatak bio 0,2 a ne 0. Ovo znači da vrednost binarnog broja 0,010010011 približno aproksimira vrednost decimalnog broja 0,2875. Ako se sada izvrši konverzija broja 0,010010011 u decimalni oblik, videće se da on ima vrednost 0,287109375. Dakle, razlika između vrednosti broja 0,2875 i njegove binarne reprezentacije sa 9 značajnih cifara 0,010010011 je 0,000390625. Ovo pokazuje da se u internoj reprezentaciji vrednosti realnih brojeva najčešće aproksimiraju. Mašinski fakultet u Nišu Osnove programiranja
Binarni oblik naučne notacije Normalizovani oblik nekog broja u naučnoj notaciji se može predstaviti i u binarnom brojnom sistemu Opšti oblik broja je: ± M * 2E Celobrojni deo mantise C, koji je u ovom slučaju binarna cifra, može da uzme samo vrednost C=1, jer zbog izvršene normalizacije prva cifra ne može da bude nula. Ova činjenica je iskorišćena da se sa istim brojem bitova dobije binarna reprezentacija veće preciznosti. Normalizovani oblik nekog broja u naučnoj notaciji se može na sličan način predstaviti i u binarnom brojnom sistemu. U tom slučaju opšti oblik broja je: ± M puta 2 na E Pri čemu celobrojni deo mantise C, koji je u ovom slučaju binarna cifra, može da uzme samo vrednost C=1, jer zbog izvršene normalizacije prva cifra ne može da bude nula. Kao što će kasnije biti pokazano, ova činjenica je iskorišćena da se sa istim brojem bitova dobije binarna reprezentacija veće preciznosti. Mašinski fakultet u Nišu Osnove programiranja
Primer broja 2349,62510 U binarnom brojnom sistemu pre normalizacije izgleda 100100101101,1012. Posle normalizacije 1,001001011011012 * 21011. Decimalni zarez je pomerena za 11 mesta, pa je vrednost eksponenta E = 1110 = 10112. Jedina cifra celobrojnog dela 1, što je slučaj sa svim normalizovanim binarnim brojevima. Na primer, broj 2349,62510 u binarnom brojnom sistemu pre normalizacije izgleda 100100101101,101. Posle normalizacije ovaj broj dobija oblik 1,00100101101101 * 21011. Decimalni zarez je pomerena za 11 mesta, pa je vrednost eksponenta E = 1011. Iza primera se vidi da je jedina cifra celobrojnog dela 1, što je slučaj sa svim normalizovanim binarnim brojevima. Mašinski fakultet u Nišu Osnove programiranja
Format zapisa brojeva sa pokretnim zarezom 31 30 23 22 znak eksponent mantisa U ranim danima računarske tehnike svaki proizvođač računara je imao sopstveni metod za internu reprezentaciju realnih brojeva. Ovo je dovodilo do teškoća u prenosu podataka sa jednog na drugi računar, sve dok nije donet standard IEEE 754. Prema ovom standardu brojevi sa pokretnim zarezom se mogu zapisati u jednostrukoj i dvostrukoj preciznosti. Format zapisa brojeva sa pokretnim zarezom u jednostrukoj preciznosti ima oblik prikazan na slajdu. Po ovom formatu jedan bit se koristi za reprezentaciju znaka, 8 bitova za reprezentaciju eksponenta i 23 bitova za reprezentaciju mantise, dakle ukupno 32 bita. Bit za znak ima vrednost 1 ukoliko je znak negativan i 0 ukoliko je znak pozitivan. Mašinski fakultet u Nišu Osnove programiranja
Pozitivan ili negativan celobrojni eksponent Za reprezentaciju vrednosti eksponenta predviđeno 8 binarnih cifara Ako se jedna cifra odvoji za znak eksponentasmanjiće se vrednost najvećeg eksponenta koji je moguće reprezentovati na polovinu. eksponent bi mogao da bude u intervalu ± 6410. Zato se uvodi predvrednost eksponenta (bias) koja iznosi 127. Ovaj broj se dodaje stvarnoj vrednosti eksponenta koja može da se kreće u intervalu -12710 ≤ E ≤ +12810. U reprezentaciji eksponenta se upisuje u binarnom obliku pozitivan broj koji može da bude u rangu od 0 do 255, a stvarna vrednost eksponenta se dobija kad se od tog broja oduzme broj 12710. Realni brojevi mogu imati pozitivan ili negativan celobrojni eksponent. Kako je za reprezentaciju vrednosti eksponenta predviđeno 8 binarnih cifara, to znači da bi jednu trebalo odvojiti za znak eksponenta, čime bi se smanjila vrednost najvećeg eksponenta koji je moguće reprezentovati na polovinu. Drugim rečima, eksponent bi mogao da bude u intervalu ± 6410. Da bi se to izbeglo, uvodi se predvrednost eksponenta (bias) koja iznosi 127. Ovaj broj se dodaje stvarnoj vrednosti eksponenta koja može da se kreće u intervalu -12710 ≤ E ≤ +12810. Dakle, u reprezentaciji eksponenta se upisuje u binarnom obliku pozitivan broj koji može da bude u rangu od 0 do 255, a stvarna vrednost eksponenta se dobija kad se od tog broja oduzme broj 12710. Mašinski fakultet u Nišu Osnove programiranja
Predvrednost eksponenta (bias) Stvarna decimalna vrednost eksponenta (E) Decimalna vrednost u zapisu eksponenta Binarna vrednost u zapisu eksponenta +6 133 10000101 +128 255 11111111 127 01111111 -6 121 01111001 -127 00000000 Na slajdu je prikazana uporedna tabela stvarne vrednosti eksponenta i vrednosti koja je u binarnom obliku upisana u polje za eksponent Mašinski fakultet u Nišu Osnove programiranja
Jednostruka tačnost Interna reprezentacija mantise se sastoji od prvih 23 decimalnih cifara iz normalizovanog binarnog zapisa mantise. Celobrojni deo mantise, koji je uvek jedinica, se odbacuje kao redundantan podatak. Na taj način se povećava preciznost prezentacije na 24 cife. Ova reprezentacija je poznata kao reprezentacija skrivene jedinice. Ovakva interna reprezentacija mantise dozvoljava tačno prikazivanje prvih sedam značajnih cifara realnog broja u decimalnom obliku. Interna reprezentacija mantise se sastoji od prvih 23 decimalnih cifara iz normalizovanog binarnog zapisa mantise. Celobrojni deo mantise, koji je uvek jedinica, se odbacuje kao redundantan podatak. Na taj način se povećava preciznost prezentacije na 24 cife. Ova reprezentacija je poznata kao reprezentacija skrivene jedinice. Ovakva interna reprezentacija mantise dozvoljava tačno prikazivanje prvih sedam značajnih cifara realnog broja u decimalnom obliku. Mašinski fakultet u Nišu Osnove programiranja
Dvostruka tačnost Ukupno 64 bita Jedan bit se koristi za znak, 11 za eksponent i 52 za mantisu. predvrednost (bias) je u ovom slučaju 102310. Binarna preciznost mantise od 52 cifre omogućuje preciznost od 15 značajnih cifara u decimalnom brojnom sistemu. Pored jednostruke, standard IEEE 754 definiše i format zapisa brojeva sa pokretnim zapisom u dvostrukoj tačnosti (double precision). Za binarnu reprezentaciju realnih brojeva se u dvostrukoj preciznosti koristi 64 bita. Jedan bit se koristi za znak, 11 za eksponent i 52 za mantisu. Eksponent se određuje tako što se stavrnom eksponentu dodaje predvrednost (bias) koja je u ovom slučaju 1023. Ovo je zbog toga što se za zapis eksponenta koristi 11 binarnih cifara, što omogućuje reprezentaciju celih brojeva vrednosti do 2048. Binarna preciznost mantise od 52 cifre omogućuje preciznost od 15 značajnih cifara u decimalnom brojnom sistemu. 63 62 52 51 znak eksponent mantisa Mašinski fakultet u Nišu Osnove programiranja
Oblasti brojeva Oblast brojeva (približno) Binarno Decimalno 32 24 Dužina internog zapisa u bitovima Preciznost mantise u bitovima Oblast brojeva (približno) Binarno Decimalno Jadnostruka preciznost 32 24 2-126 do 2127 1,18*10-38 do 3,40*1038 Dvostruka preciznost 64 53 2-1022 do 21023 2,23*10-308 do 1,79*10308 U tabeli na slajdu je dat uporedni prikaz oblasti brojeva koji se može prikazati jednostrukom i dvostrukom tačnošću. Ovi brojevi mogu biti pozitivni ili negativni. Treba primetiti da je nemoguće prikazati jako male brojeve bliske nuli, što u slučajevima deljenja malih brojeva velikim u nekim programima dovodi do numeričke nestabilnosti ili prekida rada programa. Mašinski fakultet u Nišu Osnove programiranja
Specijalni slučajevi IEEE 754 standard identifikuje 5 kategorija brojeva sa pokretnim zarezom: nula, beskonačan broj, NaN, denormalizovani broj i normalizovani broj. Nula je izdvojena u posebnu kategoriju zato što po napred navedenim pravilima normalizacije nikad ne može biti normalizovana (ne javlja se celobrojna 1). Ona može bit pozitivna ili negativna. Beskonačan broj se dobija kao rezultat operacije u kojoj se broj različit od nule deli sa nulom. I on može biti pozitivan ili negativan. NaN je skraćenica od Not a number. Ovakav “broj” se dobija kao rezultat loše definisanih operacija. Tipičan primer je operacija deljenja 0.0 sa 0.0 koja nema matematički definisan rezultat, pa se rezultat operacije ne smatra brojem. Denormalizovani brojevi su uvedeni da bi mogla da se vrši interna prezentacija brojeva koji su manji od najmanjeg normalizovanog broja koji je moguće zapisati. IEEE 754 standard identifikuje 5 kategorija brojeva sa pokretnim zarezom: nula, beskonačan broj, NaN, denormalizovani broj i normalizovani broj. Ranije je opisan zapis normalizovanih brojeva. Nula, beskonačni broj i NaN, su specijalni slučajevi. Nula je izdvojena u posebnu kategoriju zato što po napred navedenim pravilima normalizacije nikad ne može biti normalizovana (ne javlja se celobrojna 1). Ona može bit pozitivna ili negativna. Beskonačan broj se dobija kao rezultat operacije u kojoj se broj različit od nule deli sa nulom. I on može biti pozitivan ili negativan. NaN je skraćenica od Not a number. Ovakav “broj” se dobija kao rezultat loše definisanih operacija. Tipičan primer je operacija deljenja 0.0 sa 0.0 koja nema matematički definisan rezultat, pa se rezultat operacije ne smatra brojem. Denormalizovani brojevi su uvedeni da bi mogla da se vrši interna prezentacija brojeva koji su manji od najmanjeg normalizovanog broja koji je moguće zapisati. Mašinski fakultet u Nišu Osnove programiranja
5 kategorija brojeva sa pokretnim zarezom Eksponent Frakcija nula 000000002 Beskonačan broj 111111112 NaN (not a number) ≠ 0 Denormalizovani brojevi Normalizovani brojevi ≠ 000000002 ≠ 111111112 U tabeli su prkazane 5 kategorije brojeva sa pokretnim zarezom i njihovi eksponenti. Mašinski fakultet u Nišu Osnove programiranja
ARITMETIČKO – LOGIČKA JEDINICA Princip rada računara OPERATIVNA MEMORIJA SISTEMSKI PROGRAMI APLIKATIVNI PROGRAMI PODACI UPRAVLJAČKA JEDINICA DEKODER ADRESA MEMORIJSKI REGISTRI PODATAKA MEMORIJSKI ADRESNI REGISTRI REGISTAR NAREDBI ADRESNI DEO (OPERANDI) KOD OPERACIJA PROGRAMSKI BROJAČ DEKODER OPERACIJE GENERATOR UPRAVLJAČKIH SIGNALA TAKTNI GENERATOR ARITMETIČKO – LOGIČKA JEDINICA Mašinski fakultet u Nišu Osnove programiranja
Koraci izvođenja naredbe Faza prihvatanja Čitanje naredbe Dekodiranje naredbe Čitanje operanda Određivanje adrese naredne naredbe Faza izvršavanja - izvođenje naredbe Faza odlaganja -zapisivanje rezultata U prvom koraku se iz programskog brojača čita adresa memorijske lokacije naredbe koja će se izvršiti i vrši njeno kopiranje iz operativne memorije u registar naredbi. Naredba se sastoji iz operacionog koda, modifikatora i jednog ili više operanada. Svaka naredba (npr. sabiranje ili komplementiranje) imaju svoj kod na osnovu koje je upravljačka jedinica prepoznaje. Modifikator je podatak koji prikazuje koji je način adresiranja primenjen i pomaže u određivanju stvarnih memorijskih adresa operanda. Operand ili operandi su podaci nad kojima se operacija vrši. Za različite operacije razlikuju se broj i i značenje operanda. Tako operandi mogu biti: adresa memorijske lokacije podatka nad kojim se vrši operacija broj memorijskog registra koji se koristi u operaciji adresa memorijske lokacije koja koristi naredbu na koju se prenosi tok izvršenja programa logička adresa periferne jedinice koja učestvuje u operaciji U drugom koraku se kod operacije prosleđuje dekoderu operacija koji prepoznaje operaciju i preko generatora priprema upravljačku jedinicu za izvršenje tražene naredbe. U narednom koraku se određuju stvarne adrese operanda i one se kopiraju u memorijski registar podataka. Na kraju faze koja se zove prihvatanje i koja obuhvata sve prethodne korake, se vrši određivanje adrese memorijske lokacije naredbe. To se postiže odgovarajućim inkrementiranjem programskog brojača ukoliko je struktura programa linijska ili izračunavanjem adrese ukoliko se radi o granjanju ili petlji. Druga faza je faza izvršavanja. Pošto su pripremljeni svi potrebni elementi izvršava se operacija čiji je kod pročitan. Ukoliko je u pitanju bila aritmetičko-logička naredba postoji još jedna faza u kojoj se dobijeni rezultati zapisuju. Kada se izvrši kompletan ciklus, čita se nova naredba i ciklus se ponavlja. Sinhronizaciju izvršavanja napred navedenih koraka vrši taktni generator. On prozvodi taktni impuls vrlo visoke frekvence (1-5 GHz) koji, ustvari, određuje brzinu rada računara. Vreme između generisanja dva takta naziva se mašinski ciklus. Za izvršenje jedne naredbe potrebno je jedan ili više mašinskih ciklusa. Tokom faza pripreme i izvršavanja naredbi u procesoru se događaju određene promene u njegovim registrima. Ove promene mogu da se ostvare na dva načina: ožičenom logikom i mikroprogramski. Ožičeni procesori (hardwired) imaju fiksno ožičen generator upravljačkih signala koji može da izvršava konačan broj unapred određenih naredbi. Obogaćivanje procesora novim naredbama podrazumeva izmene u procesoru. Mikroprogramski realizovani procesori imaju pored registra naredbi i registre mikronaredbi. Jednoj naredbi odgovara nekoliko mikro naredbi. Sve ove naredbe su smeštene u posebnoj mikroprogramskoj memoriji. Ovakvi procesori su bolji od ožičenih iz dva razloga: jeftiniji su i omogućavaju promenu ili proširenje seta naredbi koje procesor može da izvršava. Mašinski fakultet u Nišu Osnove programiranja
Mašinski jezik I generacija Svaki procesor ima svoj mašinski jezik Svi programski jezici se pre izvršenja prevode na mašinski jezik I generacija Mašinski fakultet u Nišu Osnove programiranja
Mašinski jezik int counter = 0; counter = counter + 1; Primer Java programa: int counter = 0; counter = counter + 1; Adekvatni zapis u mašinskom jeziku: 000101000100010001000100001000101010111110 000001110101000111110000100010000010101010 Mašinski fakultet u Nišu Osnove programiranja
Vrste računarskih jezika Programski jezici (npr. Java, C++) Skript jezici (npr. pHp, Pyton, JavaScript) Specifikacioni jezici (IDEF, dijagrami) Jezici upita (SQL) Markup jezici (HTML, XHTML, TeX, SGML, XML) Transformacioni jezici (XSLT - Extensible Stylesheet Language Transformations) Mašinski fakultet u Nišu Osnove programiranja
OSNOVNI POJMOVI SINTAKSA JEZIKA: skup pravila koja definišu legalnu upotrebu jezika SEMANTIKA: značenje pojedinih konstrukcija REZERVISANE REČI Mašinski fakultet u Nišu Osnove programiranja
Generacije programskih jezika I generacija - Mašinski jezik II generacija - Asembler III generacija Proceduralno orijentisani Problemski orijentisani Objektno orijentisani IV generacija (Aplikacioni jezici 4GLs) V generacija (Rešavanje problema upotrebom ograničenja 5GL) Prirodni jezici Mašinski fakultet u Nišu Osnove programiranja
VRSTE JEZIKA Deklarativni jezici Šta program treba da uradi Primer SQL Imperativni jezici Kako program to treba da uradi Primer Java, C++ Mašinski fakultet u Nišu Osnove programiranja
JOŠ JEDNA KLASIFIKACIJA Applicative (functional) languages Concurrent, distributed, and parallel languages Constraint and logic languages Data-flow languages Design languages Extensible languages Macro and assembly languages Microprogramming languages Multiparadigm languages Nondeterministic languages Nonprocedural languages Object-oriented languages Specialized application languages Very high-level languages Mašinski fakultet u Nišu Osnove programiranja
Asembler II generacija Jezik zasnovan na mnemonicima Svakom mnemoniku odgovara jedna instrukcija mašinskog jezika I danas se koriste kada je potrebno pisati sistemske programe II generacija Mašinski fakultet u Nišu Osnove programiranja
Asembler movl #0x1,n compare: cmpl #oxa,n cgt end_of_loop acddl #0x1,n bra compare end_of_loop: Mašinski fakultet u Nišu Osnove programiranja
Proceduralno orijentisani III generacija Proceduralno orijentisani NAUČNI FORTRAN (1954-1957) FORmula TRANslator APL (1968) A Programming Language POSLOVNI COBOL (1959) Comon Busines Oriented Language RPG (1964) Report Program Generator VIŠENAMENSKI BASIC (1965) Pascal (1968) Blaise Pascal Ada (1980) Augusta Ada Lovelance C (1972) Mašinski fakultet u Nišu Osnove programiranja
Problemski orijentisani III generacija Problemski orijentisani GPSS - jezik za simulaciju sistema APT - za NUMA PostScript Mašinski fakultet u Nišu Osnove programiranja
Objektno orijentisani jezici III generacija Objektno orijentisani jezici Smalltalk C++ Java Eiffel Mašinski fakultet u Nišu Osnove programiranja
RAZVOJ JEZIKA Mašinski fakultet u Nišu Osnove programiranja
JEZICI ČETVRTE GENERACIJE IV generacija JEZICI ČETVRTE GENERACIJE "Application specific" jezici. Neproceduralni jezici visokog nivoa izgrađeni oko baza podataka. Nazivaju ih i "report-generator" jezici jer opisuju format podataka i izveštaj da bi se generisao i preveo u neki drugi jezik (npr COBOL) Poznatiji 4GL su: SQL, FOCUS, PostScript, Gaus, Mathematica Mašinski fakultet u Nišu Osnove programiranja
JEZICI PETE GENERACIJE Prolog, OPS5, Mercury Povezani sa veštačkom inteligencijom (AI - artificial intelligence) Programiranje logike , modeliranje realnog sveta ili situacije Experni sistemi Sistemi zasnovani na znanju (KBS – Knowledge Based Systems) Fuzzy logic, Neural networks Mašinski fakultet u Nišu Osnove programiranja
JEZICI VEŠTAČKE INTELIGENCIJE IPL – Information Processing Language (1960) – vrlo primitivan LISP - list processing 1960 – fakti su predstavljani listama PROLOG – programming in logic – jezik zasnovan nad produkcionim pravilima CLIPS Mašinski fakultet u Nišu Osnove programiranja
ŽIVOTNI CIKLUS PROGRAMA PROJEKTOVANJE Algoritam User interface Arhitektura i organizacija programa RAZVOJ IZVRŠENJE Izvršni kod se učitava u RAM (loader) Rezerviše se mesto za program i podatke ODRŽAVANJE Ispravljanje uočenih grešaka Poboljšanje i proširenje funkcija programa Mašinski fakultet u Nišu Osnove programiranja
RAZVOJ PROGRAMA Projektovanje aplikacije Pisanje izvornog koda (editor) Dokumentovanje programa Prevođenje u objektni kod (compiler - interpreter) Povezivanje sa podprogramima i bibliotečkim funkcijama (linker) Testiranje Izrada uputstva za korišćenje programa Izrada poboljšanih i novih verzija programa Mašinski fakultet u Nišu Osnove programiranja
IZVRŠAVANJE PROGRAMA Prevodioci – compiler Interpreteri Virtuelne mašine WEB - čitači web stranica Mašinski fakultet u Nišu Osnove programiranja
NAJVAŽNIJI JEZICI U UPOTREBI PASCAL C++ C# JAVA VISUAL BASIC HTML Mašinski fakultet u Nišu Osnove programiranja
PASCAL Razvio ga je 1970 Nicklaus Wirth da bi efikasno učio studente programiranju Strukturno programiranje (top-down design) korišćenjem procedura Mašinski fakultet u Nišu Osnove programiranja
BASIC I PASKAL ŠPAGETI KOD X :=sqr(X) + 5 writeln ('Vrednost X=',X) if X>5 then begin X :=sqr(X) + 5 writeln ('Vrednost X=',X) end else X:=0 writeln (X je premalo') end; 100 IF X>5 THEN 200 ELSE 300 110 PRINT "VREDNOST X=";X 120 END 200 X=X*X + 5 210 GOTO 110 300 X=0 310 PRINT "X JE PREMALO" 320 GOTO 120 ŠPAGETI KOD Mašinski fakultet u Nišu Osnove programiranja
C++ Objektno orijentisan Objekti su definisani klasama Objekt je instanca neke klase Izvedene klase nasleđuju osobine svojih roditelja (Inheritance) Polimorfizam Mašinski fakultet u Nišu Osnove programiranja
JAVA 1995 Objektno orijentisan Interpretiran – Java prevodilac generiše kod za Java Virtual Machine Nezavisan od arhitekture Multithreaded – izvršenje u više niti Posebno pogodan za Internet aplikacije Mašinski fakultet u Nišu Osnove programiranja
C # C# je komponentno orijentisan programski jezik (na srpskom se čita kao C sharp. Sličan je Javi u tom smislu što programerima omogućava da kôd pišu samo jednom a potom njegove delove iznova koriste za pravljenje različitih aplikacija. Izveden je iz jezika C i C++ i Microsoft ga smatra najefikasnijim programskim jezikom za izgradnju Web usluga zasnovanih na proširivom jeziku za označavanje (Extensible Markup Language, XML). Mašinski fakultet u Nišu Osnove programiranja