You are on page 1of 12

Dodatak A – Matematička logika i kodiranje podataka

A.1 Matematička i digitalna logika


Bit će navedeni osnovni pojmovi matematičke logike potrebni za razumijevanje računa izjava (ili
algebre sudova), koji se intenzivno koristi u programiranju, i digitalne logike koja je temelj
hardverskog ustrojstva digitalnog računala.
Osnovni objekt kojeg proučava račun izjava je elementarna izjava. Elementarna izjava može imati
samo jedno svojstvo - njome se izriče:
"laž" ili "istina" .
Naprimjer, izjava "osam je veće od sedam" je istinita, a izjava "broj sto je djeljiv sa sedam" je laž.
Pri označavanju izjava koristit će se slovo T (true) za istinitu izjavu i F (false) za lažnu izjavu.
Rečenica "broj x je veći od broja y" ne predstavlja izjavu jer njena istinitost ovisi o veličini brojeva
x i y. Ako se umjesto x i y uvrste brojevi dobije se izjava. Ovakove rečenice se nazivaju izjavne
funkcije, za x i y se kaže da su (predmetne) varijable, a odnos među njima kojeg izjavna funkcija
izriče da je predikat. Označi li se u prethodnom primjeru predikat " ... je veći od.... " sa P,
navedena izjavna funkcija se može zapisati u obliku P(x,y). U tom slučaju imamo dvomjesni
predikat, jer se izražava odnos dviju varijabli; općenitije predikat može biti n-mjesni. Izjavne
funkcije se prevode u izjave kada se uvrsti vrijednost predmetnih varijabli ili ako se uz izjavne
funkcije primijene neodređene zamjenice svaki (oznaka ∀ koja se naziva univerzalni
kvantifikator) ili neki (oznaka ∃ koja se naziva egzistencijalni kvantifikator). ∃x se čita i
"postoji x". Naprimjer, prethodna izjavna funkcija primjenom kvantifikatora u predikatskom
izrazu
(∀y)(∃x)P(x,y)
postaje izjava koja znači: "za svaki broj y postoji broj x takav da je x veći od y".
Rezultat izjavne funkcije je logička vrijednost T ili F, i kada se pridijeli nekoj varijabli takova
varijabla se naziva logička varijabla. U programiranju se često koriste izjavne funkcije iskazane
tzv. relacijskim izrazima. Naprimjer,
a ← (x<z)
označava da se logičkoj varijabli a pridjeljuje logička vrijednost određena izjavnom funkcijom
(x<z). Kada je x manje od z logička varijabla poprima logičku vrijednost T inače je F. Standardno
se koriste relacijski operatori: < (veće), > (manje), ≠ (različito ili nije jednako), ≥ (veće ili jednako),
≤ (manje ili jednako).
Više izjava može formirati složenu izjavu.
Konjukcija a&b (ili a ∧ b) dviju izjava a i b je je složena izjava, nastala povezivanjem izjava a i b
veznikom i za kojeg se upotrebljava simbol ∧ ili &. Složena izjava je istinita samo ako su obje
izjave istinite. Izjava a & b čita se "a i b" ili "a et b".
Disjunkcija a ∨ b je složena izjava, koja je lažna onda i samo onda kada su obje izjave lažne; a ∨
b čita se "a ili b" ili " a vel b"
Implikacija a ⇒ b je složena izjava koja je lažna onda i samo onda ako je a istinito i b lažno; čita
se " a povlači b" ili " a implicira b". Za izjavu b ⇒ a kažemo da je obrat izjave a ⇒ b. Vrijedi i
sljedeće tumačenje implikacije: ako je izjava a ⇒ b istinita onda je a dovoljan uvjet za b, ili: b je
nuždan uvjet za a.
Ekvivalencija a ⇔ b je složena izjava koja je istinita onda i samo onda kada su obje izjave
istinite, ili kada su obje lažne: čita se " a je ekvivalentno sa b".
Negacija ¬a je izjava koja je istinita onda i samo onda kada je izjava a lažna.
Usvoji li se da a i b predstavljaju logičke varijable, tada simboli: ¬,&,∨,⇔ i ⇒ predstavljaju
logičke operatore. Njihovo se djelovanje može opisati tzv. tablicom istinitosti:

a b ¬a a & b a ∨ b a ⇒ b a ⇔ b
T T F T T T T
T F F F T F F
F T T F T T F
F F T F F T T
Tablica A.1. Tablica istinitosti logičkih operacija
Upotrebom navedenih logičkih operatora i uvođenjem zagrada mogu se, kao i u algebri, graditi
razni logički izrazi. Naprimjer:
(a ∨ b) ⇒ c
¬a ∨ (c & d).
Redosljed izvršavanja operacija je sljedeći: (1) izraz u zagradi, (2) negacija, (3) disjunkcija, (4)
konjukcija, (5) implikacija i ekvivalencija. Logički izrazi koji sadrže samo operacije negacije,
konjukcije i disjunkcije, te zagrade, određuju Booleovu algebru. Logički izrazi koji sadrže
operatore implikacije i ekvivalencije mogu se izraziti pomoću Booleovih izraza. Vrijedi:
x ⇒ y = ¬x ∨ y
x ⇔ y = ¬((¬x & y) ∨ (¬y & x))
što se potvrđuje iz tablice istinitosti.
U Booleovoj algebri vrijede slijedeće zakonitosti:
1. Zakon komutacije
x ∨ y ≡ y ∨ x
x & y ≡ y & x
2. Zakon asocijacije
x ∨ (y ∨ z) ≡ (x ∨ y) ∨ z
x & (y & z) ≡ (x & y) & z
3. Zakon idempotentnosti
x ∨ x ≡ x
x & x ≡ x
4. Zakon distribucije
x ∨ (y & z) ≡ (x ∨ y) & (x ∨ z)
x & (y ∨ z) ≡ (x & y) ∨ (x & z)
5. De Morganov zakon
¬(x ∨ y) ≡ ¬x & ¬y
¬(x & y) ≡ ¬x ∨ ¬z
6. Zakon dvostruke negacije
¬¬x ≡ x
Primjeri primjene ovih zakona pri programiranju bit će dani u kasnijim poglavljima.
Booleova logika ima veliku primjenu u programiranju i posebno pri projektiranju sklopova
digitalnog računala, jer se gotovo svi potrebni sklopovi digitalnog računala mogu realizirati
pomoću tri temeljna elektronička sklopa - invertor, Sklop-I (AND Gate) i Sklop-ILI (OR Gate).

Dodatak A. Logika i kodiranje A-2


A A
A
A Sklop - I A & B Sklop - ILI A B
B B
Invertor

A
A B
B

Slika A.1. Temeljni digitalni sklopovi


Ovi se sklopovi upravljaju naponom (ili strujom) tako da reagiraju na stanje pod naponom i stanje
bez napona, dakle oni raspoznaju samo dvije naponske razine: nisku i visoku. Uobičajeno se ta dva
stanja označavaju s "1" i "0" umjesto s true i false. To su sklopovi kojima izlaz odgovara
operacijama negacije, disjunkcije i konjukcije ulaznih logičkih stanja "0" i "1". Funkcija ovih
sklopova se može prikazati pomoću preklopki. Naprimjer, rad sklopa I se može opisati strujnim
krugom u kojem su serijski spojene žarulja, sklopka A i sklopka B. Žarulja će zasvijetliti kada
proteče struja, a to je moguće samo ako ako su obje sklopke uključene, odnosno izlaz je 1 samo ako
su varijable A i B jednake 1. Kod sklopa ILI dovoljno je uključiti jednu sklopku da bi zasvijetlila
žarulja. Očito sklop I obavlja logičku funkciju konjukcije, a sklop ILI obavlja logičku funkciju
disjunkcije. U digitalnom se računalu pomoću navedenih sklopova obrađuje i prenosi mnoštvo
digitalnih signala.
Pošto je uvedeno označavanje stanja digitalnog signala znamenkama 0 i 1 može se reći da se
digitalnim signalom prenosi poruka o vrijednosti binarne znamenke koja u jednom trenutku može
imati iznos nula ili jedinica. Iz tog se razloga umjesto pojma Booleova algebra ili matematička
logika često koristi pojam digitalna logika.
U digitalnoj je tehnici uobičajena primjena logičkih operatora na nizove bitova. Tada se
podrazumijeva da se logičke operacije provode nad bitovima jednake značajnosti. Takove logičke
operacije se nazivaju bit-značajne operacije. Naprimjer, bit značajnom konjukcijom (bit-wise
AND) dva binarna niza A i B dobije se niz C:

7 6 5 4 3 2 1 0 bit
-----------------------
1 1 0 0 1 1 1 1 = A
0 0 0 0 0 1 0 0 = B
----------------------
A & B = 0 0 0 0 0 1 0 0 = C

Uočimo da u nizu C jedino bit 2 može biti jednak 1 i to samo ako je i u nizu A prvi bit jednak 1.
Ovo je često korišten postupak da se ispita da li je neki bit u nizu jednak 1 ili 0. Obično se niz B
naziva "maska" za ispitivanje bitova u nizu A.
Pored prije navedenih Booleovih logičkih operatora (N, AND I OR) u programiranju i u digitalnoj
se tehnici često koriste bit-značajna operacija koja se naziva ekskluzivna disjunkcija ili ekskluzivno
ILI. Ekskluzivna disjunkcija se označava znakom ⊕ ili XOR. Njen značaj u programiranju bit će
pojašnjen kasnije.
A XOR B = A ⊕ B = (¬A & B) ∨ (A & ¬B)

B XO R A B
A B A ⊕ B

Dodatak A. Logika i kodiranje A-3


0 0 0
0 1 1 A ⊕ B = (¬A & B) ∨ (A & ¬B)
1 0 1
1 1 0
Slika A.2 Definicijska tablica ekskluzivne disjunkcije i simbol digitalnog XOR-sklopa

A.2 Brojevni sustavi i računska sposobnost računala


Zanima nas na koji način se u digitalnom računalu vrše aritmetičke računske operacije. U
programskim jezicima operacije s brojevima se najčešće zapisuju u decimalnom brojevnom
sustavu, jer je čovjek naviknut na rad s decimalnim brojevima. U računalu se pak računske
operacije vrše u binarnom brojevnom sustavu.

A.2.1 Binarni brojevni sustav


Sasvim općenito, numerička vrijednost broja Z, koji je u pozicionoj notaciji zapisan znamenkama:
zn--1....z1z0,
u brojevnom sustavu baze x, računa se prema izrazu:
n −1
Z = ( zn −1 .... z1z0 ) x = ∑ zi ⋅ x i
i =0

Decimalni brojevni sustav je definiran bazom x=10 i znamenkama zi ε{0,1,2,3,4,5,6,7,8,9}.


Primjerice iznos broja 765 je jednak 7⋅102 + 6⋅101 + 5⋅100 .
Binarni brojevni sustav je definiran bazom x=2 i binarnim znamenkama zi ∈{0,1}.Primjerice,
iznos binarnog broja 1011 odgovara iznosu broja 11 u decimalnom sustavu, jer je
(1011) 2= 1⋅23 + 0⋅22 + 1⋅21 +1⋅20 = 8 + 0 + 2 + 1 = (11)10.
Općenito vrijedi da se s binarnim nizom od n bita može kodirati pozitivni cijeli broj maksimalnog
iznosa 2n -1, što odgovara broju različitih kombinacija binarnog niza duljine n umanjenom za jedan
(i nula je broj!). Napomenimo da se za pozitivne cijele brojeve koriste i nazivi kardinalni brojevi i
nepredznačeni cijeli brojevi.
U binarnom brojevnom sustavu se mogu izvoditi osnovne računske operacije kao i u decimalnom
brojevnom sustavu.
Binarno zbrajanje se obavlja kao i decimalno zbrajanje, osim što se prijenos na slijedeće značajnije
mjesto ne obavlja nakon postignutog zbroja 10, već nakon 2 (1+1).
Primjer:
1 1 ← prijenos
1 0 1 = 510 1 1 1 = 710
+ 0 1 0 = 210 + 1 0 1 = 510
----------------- ----------------------
1 1 1 = 710 1 1 0 0 = 1210

Ukoliko se zbrajanje izvodi bez prijenosa ta operacija se naziva zbrajanje po modulu 2, a u


logičkom smislu ta operacija je ekvivalentna ekskluzivnoj disjunkciji (XOR), stoga se za tu
operaciju često koristi naziv "zbrajanje po modulu 2". Operaciju zbrajanja LSB bitova može se
prikazati tablicom istine:

A B zbroj = A ⊕ B prijenos = A & B


0 0 0 0
0 1 1 0

Dodatak A. Logika i kodiranje A-4


1 0 1 0
1 1 0 1

Digitalni sklop koji realizira ovu funciju naziva se poluzbrajalo (half adder) i prikazan je na slici
A.3(a). Pri zbrajanju ostalih bitove treba pribrojiti i bit donosa, pa vrijedi tablica istinitosti:

A B donos zbroj prijenos


0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

Digitalni sklop koji realizira ovu funkciju naziva se potpuno zbrajalo i prikazan je na slici A.3(b).

donos
suma
A
A suma B
B
prijenos

prijenos

a) poluzbrajalo b) potpuno zbrajalo

Slika A.3. Sklopovska izvedba 1-bitnog zbrajala


Očito je da se upotrebom više ovakovih sklopova može "izračunati" zbroj dva binarna niza, na
način da se "prijenos" s zbrajala bitova manjeg značaja prenosi kao "donos" u zbrajalo bitova
većeg značaja.
Operacija ekskluzivne disjunkcije (XOR) se često koristi u bit-značajnim operacijama pri šifriranju
i u programima s bit-mapiranim grafičkim algoritmima. Interesantno svojstvo ove operacije je da
ako se na neki binarni niz A dva puta uzastopno primjeni bit-značajna ekskluzivna disjunkcija s
nizom B rezultatni niz je jednak nizu A. Primjerice, neka je niz A= 1010, a niz B=0110. Tada je:
A ⊕ B = 1100
(A ⊕ B) ⊕ B = 1010 = A
Dakle, prvo djelovanje je šifriranje, a drugo djelovanje je dešifriranje originalnog niza.
Binarno oduzimanje se također može izvesti slično pravilima decimalmog sustava, međutim
rezultat oduzimanja mogu biti i negativni brojevi. Kako se kodiraju negativni brojevi bit će
pokazano kasnije. Kod binarnog množenja djelomičan umnožak se pomiče za jedno mjesto ulijevo
pri svakom uzimanju idućeg množitelja. Ako je množitelj 0, djelomični umnožak je 0, a ako je
množitelj 1, djelomični umnožak jednak je množeniku. Naprimjer:

5 x 5 = 25 5 x 10 = 50

101 (5) 101 (5)


101 (5) 1010 (10)
------------ ---------------

Dodatak A. Logika i kodiranje A-5


101 000
000 101
101 000
------------ 101
11001 (25) ----------------
110010 (50)
Binarno dijeljenje se u računalu izvodi primjenom binarnog množenja i oduzimanja, na isti način
kao i kod decimalnih brojeva. Navedene operacije su ugrađene u skup naredbi većine današnjih
procesora.
Potrebno je napomenuti još dvije operacije koje se u računalu mogu izvoditi s nizovima bitova. To
su operacije logičkog posmaka bitova u lijevo ili u desno (podrazumijeva se LSB na desnoj strani
niza), a označavaju se s SHL (shift left) i SHR (shift right).
Posmak od jednog mjesta u lijevo odgovara množnju kardinalnih brojeva s 2, a posmak bitova
jedno mjesto udesno odgovara dijeljenju kardinalnih brojeva s 2. Na prazna mjesta se postavljaju
nule.
Primjer:
(0011) SHL 1 = (0110) odgovara 3 * 2 = 6
(0011) SHL 2 = (1100) odgovara 3 * 4 = 12
(1110) SHR 1 = (0111) odgovara 14 / 2 = 7

A.2.2 Oktalni i heksadecimalni brojevni sustavi


U programskim se jezicima se rijetko koristi zapis broja u binarnom obliku jer čovjek teško pamti
veće nizove "nula i jedinica". Čovjek je naviknut na decimalni sustav, međutim, kada se želi znati
binarna struktura kodiranja, onda se ona teško može sagledati iz decimalnog zapisa. Da bi se to
omogućilo koristi se literalno označavanje u oktalnom ili heksadecimalnom brojevnom sustavu.
U oktalnom brojevnom sustavu koristi se 8 znamenki: 01234567, a baza brojevnog sustava iznosi
x=23=8.
Oktalnim brojem jednostavno se označava niz od 3 bita, jer je s binarnim nizom od 3 bita moguće
kodirati 8 znamenki:
bit 0 0 1 0 1 0 1 0 1
bit 1 0 0 1 1 0 0 1 1
bit 2 0 0 0 0 1 1 1 1
-----------------------
0 1 2 3 4 5 6 7 znamenke oktalnog brojevnog sustava
To omogućuje pregledniji zapis većih binarnih nizova,
1001000101112 == 44278,
a koristi se pravilo grupiranja po 3 bita:
100=4, 100=4, 010=2, 111=7,
U heksadecimalnom brojevnom sustavu koristi se 16 znamenki: 0123456789ABCDEF, a baza
brojevnog sustava iznosi x=24=16. Za kombinacije od 10 do 15 upotrebljena su prva slova abecede,
kojima numerička vrijednost u decimalnom brojevom sustavu iznosi:
A=10, B=11, C=12, D=13, E=14 i F=15.
Heksadecimalnim se brojem jednostavno označava niz od 4 bita, jer se binarnim nizom od 4 bita
može kodirati 16 znamenki:
bit 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
bit 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
bit 2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
bit 3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
---------------------------------------
0 1 2 3 4 5 6 7 8 9 A B C D E F heksadecimalne znamenke
To omogućava pregledniji zapis većih binarnih nizova, npr.

Dodatak A. Logika i kodiranje A-6


10010001011111102 == 917E16,
a koristi se pravilo grupiranja po 4 bita:
1001=9, 0001=1, 0111=7, 1110=E.

Zaključimo:

Mogućnost da se strojno mogu izvršavati aritmetičke i logičke operacije s binarno kodiranim


podacima predstavlja matematički i elektronički temelj računarstva..

A.3 Kodiranje podataka


Podaci (data) u računalu se sastoje od binarno kodiranih znakova i binarno kodiranih numeričkih
vijednosti.
Kodiranje binarnog niza za primjenu u digitalnom računalu je postupak kojim se određenom
broju, slovu ili nekom kontrolnom signalu računala pridjeljuje određena kombinacija binarnih
znamenki.
Znak (character) je element dogovorno usvojenog skupa različitih simbola koji su namijenjeni
obradi podataka (slova abecede, numeričke znamenke, znakovi interpunkcije isl.). Niz znakova se
često tretira kao cjelina i naziva se string. Primjerice, u C jeziku se string literalno zapisuje kao niz
znakova omeđen znakom navodnika ("ovo je literalni zapis C stringa").
Datoteka (file) je skup podataka ili programskog kôda koji se posredstvom računala pohranjuju na
medijima za trajno očuvanje informacije: magnetskoj traci, tvrdom disku, disketi ili optičkom
disku.

A.3.1 KODIRANJE POZITIVNIH CIJELIH BROJEVA - kardinalni brojevi (eng. unsigned


integers)
Pozitivni cijeli brojevi, ili kardinalni brojevi, su svi prirodni brojevi i nula. Način njihovog
kodiranja je opisan u prethodnom poglavlju. U programskim jezicima se oni literalno zapisuju
pomoću niza znamenki. Koriste se zapisi u različitim brojevnim sustavima: decimalnom, binarnom,
heksadecimalnom i oktalnom.

A.3.2 KODIRANJE CIJELIH BROJEVA (eng. integers)


Kako opisati broj s predznakom? Većina današnjih procesora za opisivanje cijelih brojeva s
predznakom koristi tzv. komplementni brojevni sustav.
Puni komplement n-znamenkastog broja Nx, u brojevnom sustavu baze x matematički se definira
izrazom:
N x′ = x n − N x
primjerice, u decimalnom sustavu komplement troznamenkastog broja 733 je 103-733= 277. Ako se
n-znamenkasti broj i njegov komplement zbroje vrijedi da će n znamenaka biti jednako nuli. U
prijašnjem primjeru 733+277=1000, dakle tri znamenke su jednake nuli.
U binarnom se sustavu puni komplement naziva komplement dvojke i vrijedi:
N 2′ = 2 n − N 2
Komplement dvojke se koristi za označavanje negativnih brojeva. Npr. komplement dvojke broja
+1 za n=4 iznosi:
N'2 = 24 - 1 = 10000 - 0001 = 1111.

Dodatak A. Logika i kodiranje A-7


Ako se broj i njegov komplement zbroje rezultat bi trebao biti nula. To vrijedi jer su prva četiri bita
zbroja jednaka nuli. Peti bit je jednak jedinici, ali on se u 4-bitnom sustavu odbacuje.
U sustavu komplementa dvojke pozitivni brojevi uvijek imaju MSB=0, a negativni brojevi imaju
MSB=1. Razmotrimo što će se desiti ako se zbroje dva pozitivna broja koji imaju bitove ispod
MSB jednake jedinici., primjerice, zbroj 4+5;
0100
+0101
----------
1001
rezultat predstavlja negativan broj u sustavu komplementa dvojke. Do prijelaza u područje
komplementa ne bi došlo da je rezultat zbrajanja bio manji od 7, odnosno 24-1-1. Poopćimo li ovo
zapažanje na brojeve od n-bita, zaključit ćemo da operacija zbrajanja ima smisla samo ako je zbroj
operanada manji od 2n-1-1.
Zbog toga je najveći pozitivni broj koji se može predstaviti u sustavu komplementa dvojke:
max_int = (0111...111) = 2n-1-1,
a najveći iznos negativnog broja iznosi:
min_int = (1000...000) = -2n-1.
Uočimo da se može opisati, za jedan više negativnih brojeva od pozitivnih brojeva.
Obični komplement binarnog broja (naziva se i komplement jedinice) dobije se zamjenom svih
jedinica s nulom i obratno. Iznos broja. koji se dobije na ovaj način, računa se prema izrazu:
N 2 = 2n − N 2 − 1
Obični komplement nije pogodan za izražavanje prirodnih brojeva jer nije jednoznačno određena
vrijednost nule, naime obični komplement od 0000 iznosi 1111. On služi za jednostavno
izračunavanje punog komplementa, jer vrijedi:
N 2′ = N 2 + 1
Dakle, puni komplement se izračunava tako da se najprije izračuna obični komplement, kojem se
zatim pridoda jedinica. Naprimjer, komplement dvojke broja 6 u 8-bitnoj notaciji iznosi:
00000110 (+6)
--------
11111001 (obični komplement od +6)
1 (dodaj 1)
--------
11111010 (-6 u komplementu dvojke)

Izračunajmo puni komplement od 0;


00000000 (0)
--------
11111111 (komplement od 0)
1 (dodaj 1)
--------
100000000 (-0 u komplementu dvojke)
Jedinica predstavlja deveti bit. Ona se u 8-bitnom sustavu odbacuje pa rezultat opet predstavlja
nulu.
Komplement dvojke omogućuje jednoznačno određivanje nule, i to je razlog što za predstavljanje
cijelih brojeva, nije izabran obični komplement.

Dodatak A. Logika i kodiranje A-8


A.3.3. KODIRANJE REALNIH BROJEVA
Realni brojevi se u matematici i i višim programskim jezicima zapisuju na način da se cijeli i
decimalni dio odvoje decimalnim zarezom (pr. 67,098), a koristi se i ekponentni format (eng.
scientific format). Primjerice prethodni se broj može zapisati u obliku 0,67089⋅102.. U
programskom jeziku C koristi se sličan zapis kao u matematici, s razlikom da se umjesto
decimalnog zareza koristi "decimalna točka", a potencija broja 10 se označava velikim ili malim
slovom E.

matematički zapis ekvivalentni zapis u C-jeziku


1,789 1.789
0,789 0.789 ili
.789
-178,9⋅10-2 -178.9e-2 ili
-178.9E-2
-0,01789⋅102 -0.01789e2 ili
-0.01789E2 ili
-0.01789e+2
Tablica A.3. Matematički i programski zapis realnih brojeva
Eksponentni format se sastoji od dva dijela: mantise i eksponenta
eksponentni decimalni format = mantisa 10eksponent
Mantisa se zapisuje kao obični decimalni broj s predznakom, a eksponent se zapisuje kao cijeli
broj. Prednost korištenja eksponentnog formata je u lakšem zapisu vrlo velikih i vrlo malih brojeva.
Uočimo da se promjenom vrijednosti eksponenta pomiče položaj decimalnog zareza.
Kodiranje s fiksnim položajem binarne točke (eng. fixed point numbers)
Umjesto pojma decimalnog zareza uvodi se pojam binarne točke. Opći oblik zapisivanja realnog
broja s fiksnim položajem binarne točke, u slučaju da se N znamenki koristi za označavanje cijelih
vrijednosti, a n znamenki za označavanje razlomljenih vrijednosti (po bazi 2: 1/2, 1/4, 1/8 itd.)
glasi: bN −1bN − 2 ... b0 • b−1b−2 ... b− n , a iznos mu se računa prema izrazu:

N .n2 = bN −1 2 N −1 + ... + b0 2 0 + b−1 2 −1 + b− 2 2 −2 + ... + b− n 2 − n , bi ∈ (0,1)


Ako se ovaj broj pomnoži s 2n može ga se u operacijama smatrati cijelim brojem, a nakon izvršenih
aritmetičkih operacija rezultat se skalira za iznos 2-n. Ovakovi oblik kodiranja ima brojne
nedostatke, i koristi se samo u izuzetnim slučajevima.
Kodiranje s pomičnim položajem binarne točke (eng. floating point numbers)
Ideja eksponentnom formata uzeta je kao temelj za kodiranje realnih brojeva i u binarnom
brojevnom sustavu. Kodiranje se vrši prema izrazu

F = ( − 1) m 2 e
s

gdje m predstavlja mantisu, e je eksponent dvojke, a s∈(0,1) određuje predznak broja. Eksponent i
mantisa se kodiraju u binarnom brojevnom sustavu. Eksponent se kodira kao cijeli broj, a mantisa
kao binarni broj s fiksnim položajem binarne točke. Ideja je jednostavna: promjenom eksponenta
pomiče se i položaj binarne točke iako se mantisa zapisuje s fiksnim položajem binarne točke.
Primjerice, neka je broj kodiran u obliku:
0.00001xxxxxxxxx 2e
gdje x može biti 0 ili 1. Ovaj oblik zapisa realnog broja naziva se nenormalizirani zapis.
Pomaknemo li položaj binarne točke za 5 mjesta ulijevo dobije se ekvivalentni zapis

Dodatak A. Logika i kodiranje A-9


1.xxxxxxxxx00000 2e-5,
Posmak bitova ulijevo ekvivalentan je dijeljenju s dva, stoga se vrijednost eksponenta smanjuje za
5. Ovakovi kodni zapis, u kojem je uvijek jedinica na prvom mjestu, naziva se normalizirani
zapis. Značaj normaliziranog zapisa je u činjenici što se njime iskorištavaju svi bitovi mantise za
kodiranje vrijednosti, dakle osigurava se veća točnost zapisa. Normaliziranim se oblikom ipak ne
može kodirati veoma male vrijednosti, pa je tada ipak pogodniji nenormalizirani zapis broja. Treba
pojasniti i kako je kodirana vrijednost nula. Pogodno bi bilo da sva bitna polja pri kodiranju
vrijednosti nula budu jednaka nuli (zbog logičkih operacija), ali pošto se za kodiranje eksponenta
također koristi binarni zapis, vrijednost eksponenta nula se matematički koristi za označavanje
brojeva većih od jedinice. Da bi se zadovoljilo zahtjevu kodiranja nule s nultim zapisom
eksponenta uobičajeno je da se umjesto stvarne vrijednosti eksponenta kodira vrijednost:
E = e + pomak,
gdje je pomak neka konstantna vrijednost, a odabire se tako da je jednak najnižoj vrijednosti
eksponenta e, koji je negativna vrijednost Ovako zapisani eksponent naziva se pomaknuti
eksponent. Značaj pomaka sagledajmo na sljedećem primjeru. Neka je eksponent opisan s 8 bita,
tada se E kreće u rasponu od 0 do 255. Ako se uzme da je pomak=127, i da je E=0 rezervirano za
kodiranje nule, onda se vrijednost binarnog eksponenta kreće u rasponu od -126 do +127.
Postoji više različitih formata zapisa mantise i eksponenta u binarnom kodu. Danas se gotovo
isključivo koristi format koji je određen ANSI/IEEE standardom br.745 iz 1985. godine. Prema
tom standardu koriste se dva tipa kodiranja: jednostruki format (32 bita) i dvostruki format (64
bita). prikazan je na slici 4.1.
Jednostruki format realnih brojeva
31 23 22 0
s - predznak
e - eksponent
s e m
m - mantisa
Dvostruki format realnih brojeva
63 52 51 0
s e m

Slika 4.1 Format kodiranja realnih brojeva prema IEEE/ANSI standardu

STANDARDNI IEEE/ANSI FORMAT REALNIH BROJEVA


parametar jednostruki (SINGLE) dvostruki (DOUBLE)
ukupan broj bita 32 (+1) 64 (+1)
broj bita eksponenta 8 11
broj bita za predznak 1 1
broj bita mantise 23 (+1) 52 (+1)
pomak +127 +1023
Emax 255 2047
Emin 0 0
minreal (za nenorm.) (-1)s⋅1.4⋅10-45 (-1)s⋅2.225⋅10-324
minreal (za norm.) (-1)s⋅1.175⋅10-38 (-1)s⋅2.225⋅10-308
maxreal s
(-1) ⋅3.4028⋅10+38 (-1)s⋅1.797⋅10+308
Tablica A.4. Standardni IEEE/ANSI format realnih brojeva
Bitna karakteristika ovog standarda je da je u format za kodiranje realnog broja moguće upisati i
šifru o ispravno obavljenoj matematičkoj operaciji. (Npr. dijeljenje s nulom dalo bi beskonačnu
vrijednost, koju je nemoguće kodirati, pa se ta operacija izvještava kao greška). Binarno kodirani

Dodatak A. Logika i kodiranje A-10


signal greške koristi format binarno kodiranih realnih brojeva, ali pošto nije broj, u standardu se
opisuje pod nazivom NaN (Not a Number). Kodiranje sa normaliziranim zapisom mantise je
izvršeno na način sa se ne upisuje prva jedinica, čime se podrazumjeva da je mantisa kodirana s
jednim bitom više nego je to predviđeno u binarnom zapisu. Vrijednost pomaka i raspona
eksponenta dana je u tablici A.4. Vrijednost eksponenta Emin je iskorištena za kodiranje nule, a
vrijednost Emax za kodiranje NaN-a i beskonačnosti. Zapis formata interpretira se na slijedeći
način:
1. Ako je E=Emax i m≠0 kodna riječ predstavlja NaN, bez obzira na vrijedost predznaka s.
2. Ako je E=Emax i m=0 kodna riječ predtavlja (-1)s (∝).
3. Ako je Emin<E<Emax kodna riječ predstavlja broj (-1)s2e-127(1.m), tj.predstavlja normalizirani
realni broj.
4. Ako je E=0 i m=0 kodna riječ prestavlja broj (-1)s(0).
1. Ako je E=0 i m≠0 kodna riječ predstavlja broj (-1)s2ee-127(0.m) tj. predstavlja nenormalizirani
realni broj (vodeća nula se ne zapisuje). Opis nenormaliziranim brojevima ne osigurava točnost
za sve brojeve pa se ovo kodiranje u nekim implementacija ne koristi. Vrijednosti za
minimalnu i maksimalnu vrijednost realnog broja u tablici A.4 dani su za normalizirani i
nenormalizirani format realnog broja.
Normaliziranim zapisom postiže se točnost na 7 decimala za jednostruki format, odnosno 15
decimala za prošireni format.
Programer, koji programira u višem programskom jeziku, ne mora znati kako se neki broj kodira u
procesoru ili memoriji računala. Njega zanimaju pravila za zapis literalnih konstanti, veličina
zauzeća memorije, maksimalna i minimalna vrijednost broja, te broj točnih decimala.

A.3.4. ASCII KOD ZA TEKSTUALNE I KONTROLNE ZNAKOVE


Za kodiranje slova, znamenki i ostalih tzv. kontrolnih znakova gotovo isključivo je u upotrebi
američki standard za izmjenu informacija ASCII ( American Standard Code for Information
Interchange). Njemu je ekvivalentan međunarodni standard ISO 7. ASCII kod se najviše koristi za
komuniciranje između računala i priključenih vanjskih jedinica: pisača, crtača, modema, terminala
itd.
To je sedam bitni kôd (ukupno 128 različitih znakova), od čega se prva 32 znaka koriste kao
kontrolni znakovi rezličite namjene, a ostali znakovi predstavljaju slova abecede, pravopisne i
matematičke simbole.
000: (nul) 016: (dle) 032: (sp) 048: 0 064: @ 080: P 096: ž 112: p
001: (soh) 017: (dc1) 033: ! 049: 1 065: A 081: Q 097: a 113: q
002: (stx) 018: (dc2) 034: " 050: 2 066: B 082: R 098: b 114: r
003: (etx) 019: (dc3) 035: # 051: 3 067: C 083: S 099: c 115: s
004: (eot) 020: (dc4) 036: $ 052: 4 068: D 084: T 100: d 116: t
005: (enq) 021: (nak) 037: % 053: 5 069: E 085: U 101: e 117: u
006: (ack) 022: (syn) 038: & 054: 6 070: F 086: V 102: f 118: v
007: (bel) 023: (etb) 039: ' 055: 7 071: G 087: W 103: g 119: w
008: (bs) 024: (can) 040: ( 056: 8 072: H 088: X 104: h 120: x
009: (tab) 025: (em) 041: ) 057: 9 073: I 089: Y 105: i 121: y
010: (lf) 026: (eof) 042: * 058: : 074; J 090: Z 106: j 122: z
011: (vt) 027: (esc) 043: + 059: ; 075: K 091: [ 107: k 123: {
012: (np) 028: (fs) 044: , 060: < 076: L 092: \ 108: l 124: |
013: (cr) 029: (gs) 045: - 061: = 077: M 093: ] 109: m 125: }
014: (so) 030: (rs) 046: . 062: > 078: N 094: ^ 110: n 126: ~
015: (si) 031: (us) 047: / 063: ? 079: O 095: _ 111: o 127: del

Tablica A.5. ACSII standard za kodiranje znakova


U Hrvatskoj se za latinična slova Č,Š,Ž,Ć,Đ,č,ć,ž,š,đ koristi modifikacija ASCII standarda. Nazvat
ćemo je HR-ASCII standard (prikazan je u tablici A.5).
Na IBM PC računalima se koristi 8-bitno kodiranje znakova, čime je omogućeno kodiranje 256
znakova. Ovaj kod se naziva EBCDIC (Extended Binary Coded Decimal Interchange Code). Prvih
128 znakova ovog koda jednaki su ASCII standarda, a ostali znakovi predstavljaju različite

Dodatak A. Logika i kodiranje A-11


grafičke i matematičke simbole te slova koja se koriste u alfabetu većine zapadno-evropskih
zemalja, a nisu obuhvaćena ASCII standardom. U sklopu tog standarda predviđeno je da se znakovi
Č,Š,Ž,Ć,Đ,č,ć,ž,š,đ kodiraju vrijednostima većim od 127. Taj standard ima oznaku EBCDIC-852 i
prikazan je u tablici A.6.

HR-ASCII IBM EBCDIC-852 standard


dec hex ASCII HR-ASCII dec hex EBCDIC-852
64 40 @ Ž 166 A6 Ž
91 5B [ Š 230 E6 Š
92 5C \ Đ 209 D1 Đ
93 5D ] Ć 172 AC Ć
94 5E ^ Č 143 8F Č
96 60 ` ž 167 A7 ž
123 7B { š 231 E7 š
124 7C | đ 208 D0 đ
125 7D } ć 134 86 ć
126 7E ~ č 159 9F č
Tablica A.6. HR_ASCII i EBCDIC-852 standard

A.3.5. Kodiranje logičkih vrijednosti


Moguće su samo su dvije logičke vrijednosti: istina i laž. U većini programskih jezika (C++,
Pascal) ove vrijednosti se zapisuju s “true” i “false”. U C jeziku se ne koristi posebno označavanje
logičkih vrijednosti, ali vrijedi pravilo da se svaka numerička vrijednost može tretirati kao logička
vrijednost “istina” ako je različita od nule, odnosno “laž” ako je jednaka nuli.
Logičke vrijednosti nastaju pri ispitivanju relacijskih izraza s operatorima: > (veće), < (manje), >=
(veće ili jednako) ,<= (manje ili jednako), == (jednako) i != (nije jednako). U C jeziku, ako je
vrijednost relacijskog izraza logička vrijednost “istina” ona se kodira kao numerička vrijednost 1, a
logička vrijednost “laž” se kodira kao numerička vrijednost 0.
Primjerice u izrazu
a = x > y;
varijabli a se pridjeljuje vrijednost 1 ako je izraz na desnoj strani istinit, odnosno ako je x veće od
y. U suprotnome, pridjeljuje se vrijednost 0. Relacijski odnos dvije vrijednosti se pri izvršavanju
programa zapravo određuje pomoću operacije oduzimanja prema slijedećoj tablici

ako je x == y x != y x > y x < y x <= y x >= y


x-y > 0 0 1 1 0 0 1
x-y = 0 1 0 0 0 1 1
x-y < 0 0 1 0 1 1 0
Tablica A.7. Izvršavanje relacijskih operacija C jezika

Dodatak A. Logika i kodiranje A-12

You might also like