понедељак, 27. април 2015.

Heksadecimalni računarski brojevni sistem

Ukoliko redovno čitate moj blog; znate i sami da sam pisao o binarnom sistemu brojeva, ASCII, oktalnim brojevima, ako znate bar kako asembler izgleda, onda sa heksadecimalnim sistemom brojeva mi završavamo jednu malu celinu i sve to zajedno čini onaj prvi i najvažniji korak u svetu računara. Korak koji se često preskače kod učenja konvencionalni programski jezika. Moj savet vam je nemojte nikad ništa da preskačete. Gde god možete, iskopajte i dodatne informacije. Učite, povezujte i uklapajte svoje znanje, kao kad gradite veliki sistem. Sve u računarima je bitno. Najgora navika kod mnogih programera je što se svesno ograničavaju pa se konstantno vraćaju unazad, jer šta vam vredi savršen kod ako ga vi ne razumete.


( Heksadecimalni kod )

Heksadecimalni sistem brojeva je nešto sa čime će te se često susretati. Svi moderni računari i uređaji koriste heksadecimalni sistem, jer sa 1 cifrom u heksadecimalnom broju, vi koristite čak 4 cifre binarnog sistema. Setite se, oktalni sistem brojeva koristi samo 3. Ali šta je to heksadecimalni sistem brojeva?



Ako mi koristimo dekadni sistem brojeva; 012345679, kompjuteri koriste binarni; 01010111. Heksadecimalni sistem je negde između, služi da olakšava komunikaciju između nas i kompjutera.
Heksadecimalni sistem brojeva vam je brojni sistem sa bazom 16, znači heksadecimalni sistem brojeva koristi 16 znakova. Numeričke znakove i prvih 6 slova engleskog alfabeta.  

0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F

Za razliku od dekadnog, oktalnog i binarnog brojevnog sistema, heksadecimalni brojevni sistem izgleda kao na slici:


( Heksadecimalni sistem brojeva )

Heksadecimalni sistem brojeva se posebno koristi u računarima za označavanje boja. Pogledajte tabele ovde.

Kako pretvoriti dekadni broj u heksadecimalni?

Isto kao i u druge brojevne sisteme sa njihovim bazama. Kod heksadecimalni brojeva delimo dekadni broj sa 16 i ostatak obilježivamo sa heksadecimalnim ciframa od 0 do F. Npr.

548610  u heksadecimalnom brojevom sistemu je:

5486 : 16 =  342  ostatak 14 što je u heksadecimalnom E
   342 : 16 =   21  ostatak  6
     21 : 16 =     1  ostatak  5
        1 : 16 =    0  ostatak  1 

548610  = 156E  u heksadecimalnom brojevom sistemu.

Kako pretvoriti heksadecimalni broj u dekadni?

Kao što dekadni broj razvrstamo na desetice, kod heksadecimalni umesto desetica koristimo bazu 16.

156E  =  ( 1 * 16³ ) + ( 5 * 16² ) + ( 6 * 16¹ ) + ( 14 * 16° )
156E  =   4096 + 1280 + 96 + 14
156E  =   5486

Kako pretvoriti heksadecimalni broj u binarni?

Jednostavno pretvorite svaku heksadecimalnu cifru u binarni broj i onda ih spojite.
Npr. uzmemo RGB boju #006eb8.

00 vam je R - crvena boja, 6E vam je G - zelena boja i B8 vam je B - plava boja. Svaka boja vam se deli na tri osnovne RGB boje i svaka od njih ima broj od 0 do 255 brojeva. Npr. ako na crvenu boju stavim 255 a na ostale 0, to će biti u heksadecimalnom prikazu boje ovako #FF0000 i to je čista crvena boja.

Ako hoću da prevedem ovaj heksadecimalni broj u binarni jednostavno prevedem svaku heksadecimalnu cifru u binarnu; koristim proširenu heksadecimalnu tablicu brojeva od 0 do 255. Proširenu heksadecimalnu tablicu pogledajte ovde.

006EB8  vam je  0 - 6E - B8  ili 0 - 110 - 184  u dekadnom što je
0000 - 1101110 - 10111000  
0000110111010111000
110111010111000

110111010111000 vam je isto što i 6EB8 ili 0000110111010111000 što je #006eb8.

Kako pretvoriti binarni broj u heksadecimalni?

Pogledajmo prvo šta je problem kod pretvaranje binarnihbrojeva u dekadne brojeve.
Ako uzmemo neki binarni broj npr.

1010110110011110

uzmemo binarni broj i razvrstamo po 4 cifre.

1010 - 1101 - 1001 - 1110

kad bi njih preveli u dekadne brojeve, onda bi to izgledalo ovako:

10 - 13 - 9 – 14

I sad kad spojimo te brojeve dobijemo 1013914 , ali to nije 1010110110011110.
1010110110011110 u dekadnom brojnom sistemu je -21090

Međutim ako pretvorimo dobijene dekadne brojeve u heksadecimalne;

A - D - 9 - E

Onda ih možemo spojiti u AD9E i to jeste 1010110110011110 ili -21090 !
Da li sad razumete zašto je heksadecimalni sistem perfektan?

Kako da pretvorite heksadecimalni broj u oktalni?

Najlakši način vam je da heksadecimalni broj prvo podelite u binarni zatim binarni broj pretvarate u oktalni.

Kako da oktalni broj pretvorite u heksadecimalni?

Prvo oktalni broj pretvorite u binarni zatim binarni pretvarate u heksadecimalni.

Kako sabrati heksadecimalne brojeve?

Slično kao i dekadne, samo što su nam cifre na bazi 16. Npr.

58D4  +
244A
--------------
       E         -  4 i A što je u dekadnom 10 su 14 dok 14 se piše E u heksadecimalnom broju.
     1E         -  D vam je 13 i 4 su 17, znači umanjujemo za 16 i pišemo 1, dok 1 prebacujemo na levo. 
   D1E        -  8 i 4 su 12 plus 1 kojeg smo prebacili su 13 a to je D
 7D1E

58D4 + 244A  = 7D1E 

Kako oduzimati heksadecimalne brojeve?

Oduzimanje je obrnut proces od sabiranja.

7D1E  -
244A
------------
       4        -   E je 14 dok je A isto što i 10; 14 - 10 = 4
    D4        -    pošto je 4 veće od 1 onda pozajmljujemo 16 i oduzimamo 1 sa desne strane,
                      tako da imamo 17 – 4 = 13 što je D u heksadecimalnom brojnom sistemu.
   8D4       -   D kojem smo oduzeli 1 je C ili 12, znači 12 - 4 = 8; i ostalo nam je 7 – 2 = 5;
 58D4

Kako množiti heksadecimalne brojeve?

Neki ljudi kada množe heksadecimalne brojeve koriste tabelu kao na slici.


( Tablica množenja za heksadecimalne brojeve )

Kad imamo tabelu onda je jednostavnije računati, ali nije neophodna.  

AF   *           - A * F = 150 : 16 = 9 ostatak 6 i pišemo 6              
7A                - A * A = 100 + 9 = 109 : 16 = 6 ostatak 13, i pišemo ga kao D i dodamo levo 6
-----------                                                                                                                
   6D6          - 7 * F = 105 : 16 = 6 ostatak 9 i pišemo 9 ali za jedno mesto više.
 4C9            - 7 * A = 70 + 6 = 76 : 16 = 4 ostatak 12, i pišemo C i dodamo levo 4
-----------      
5366           - saberemo brojeve kao što saberemo heksadecimalne brojeve!

Znači AF * 7A je 536616  ili dekadno; 175 * 122 = 21350; 2135010 = 536616

Kako se dele heksadecimalni brojevi?

Delenje heksadecimalni brojeva je previše kompleksno. Dele se slično kao dekadni brojevi ali svaka radnja mora da se tretira kao ostale aritmetičke operacije heksadecimalnog broja. Npr.

49716 : 2F16  =  1

Znači 2F se nalazi 1 u 49

49 – 2F nije više 2, nego je A1

Pa onda dobijete ovako nešto:

497 : 2F  = 1
2F
-----
1A

Kad spustite 7 onda je to 1A7:

497 : 2F  = 1
2F
-----
1A7

Zatim vi mora da znate da u  1A7 ima 9 puta 2F

497 : 2F  = 19
2F
-----
1A7
1A7
------
0                      

Rezultat je tačan ali zbog same kompleksnosti nikom ne preporučujem da na ovakav način deli heksadecimalne brojeve. Lakše je prevesti ih u dekadne pa podeliti pa opet pretvoriti u heksadecimalne.