SYSTEM DWÓJKOWY ( BINARNY )
Podstawą funkcjonalności komputera jest jego arytmetyka. Więc aby zrozumieć zasady działania komputera, trzeba zrozumieć leżącą u jego podstaw arytmetykę, a więc zrozumieć w jaki sposób liczby i rozkazy są przez komputer rozumiane.
Do przepowadzania operacji arytmetycznych na liczbach, trzeba wiedzieć w jakim systemie są te liczby rzedstawione.Np: 136 * 14 to 1904 czy 1838 ? Wbrew pozorom oba wyniki mogą być prawidłowe. Dzisiejsze komputery używają systemu dwójkowego (binarnego) składającego się z zer i jedynek. Jeden znak, a więc jedna jedynka lub zero określana jest mianem bitu a dokładniej mówiać bit może być zobrazowany jako jedynka lub zero. Dwójkowy system liczbowy to pozycyjny system liczbowy, w którym podstawą pozycji są kolejne potęgi liczby 2.
Przykłady liczb dwójkowych:
0 = 0
1 = 1
10 = 2
11 = 3
100 = 4
101 = 5
110 = 6
111 = 7
W celu przedstawienia wszystkich dziesięciu cyfr systemu dziesiętnego potrzeba 4 bitów. Jednakowo pzy pomocy 4 bitów można zobrazować 16 cyfr i tu mamy związek z systemem szesnastkowym (hexadecimal). Ale o tym później .....
Prosty sposób na przeliczanie z systemu dziesiętnego na system binarny .......
235 (10) na Z(2)
235 dzielimy przez 2 |
235 / 2 = 117 |
i 1 reszty. |
1 |
117 dzielimy przez 2 |
117 / 2 = 58 |
i 1 reszty. |
1 |
58 dzielimy przez 2 |
58 / 2 = 29 |
i 0 reszty. |
0 |
29 dzielimy przez 2 |
29 / 2 = 14 |
i 1 reszty. |
1 |
14 dzielimy przez 2 |
14 / 2 = 7 |
i 0 reszty. |
0 |
7 dzielimy przez 2 |
7 / 2 = 3 |
i 1 reszty. |
1 |
3 dzielimy przez 2 |
3 / 2 = 1 |
i 1 reszty. |
1 |
1 dzielimy przez 2 |
1 / 2 = 0 |
i 1 reszty. |
1 |
Teraz wystarczy odczytać wszystke „Reszty” od końca (dołu), a więc 235(10) = 11101011(2)
...... z systemu binarnego na system dziesiętny
Zaczynamy od pierwszej cyfry po prawej stronie
1 x 2 do potęgi 0 |
= |
1 |
1 x 2 do potęgi 1 |
= |
2 |
0 x 2 do potęgi 2 |
= |
0 |
1 x 2 do potęgi 3 |
= |
8 |
0 x 2 do potęgi 4 |
= |
0 |
1 x 2 do potęgi 5 |
= |
32 |
1 x 2 do potęgi 6 |
= |
64 |
1 x 2 do potęgi 7 |
= |
+ 128 |
|
|
= 235 |
Dodawanie w systemie dwójkowym jest stosunkowo prostą operacją.
Założmy że chcemy dodać:5 - (a więc 101) i 3 (11) .....
Carry: |
|
1 |
1 |
1 |
|
|
|
|
1 |
0 |
1 |
|
|
+ |
|
1 |
1 |
|
|
1 |
0 |
0 |
0 |
|
|
|
|
|
|
Operacja jest podobna do dodawania w systemie dziesiętnym. Warto zapamiętać sobie że jeśli w słupku musimy dodać dwie jedynki, to jest to sytuacja analogiczna do tej, jaka występuje w systemie dziesiętnym gdy musimy dodać dwie piątki. A więc 1 i 1 to 0 i ........ 1 „w pamięci”.
Określenie „w pamięci” może się wydawać trochę dziecinne ale jest ono bardzo istotne. W terminologi komputerowej takie „w pamięci” to tak zwany Carry. Jest to także jeden z bardziej istotnych rejestów procesora.Z zasady powinno się pisać liczby binarne w grupach czterocyfrowych. A więc 3 przedstawiać nie jako 11, lecz jako 0011.
Takie przedstawienie powyższej operacji:
Carry: |
|
1 |
1 |
1 |
|
|
|
0 |
1 |
0 |
1 |
|
+ |
0 |
0 |
1 |
1 |
|
|
1 |
0 |
0 |
0 |
|
|
|
|
|
|
jest w ten sposób znacznie bardziej czytelne.
Odejmowanie:
5 - (a więc 101) minus 3 (11) .....
Carry: |
|
1 |
1 |
1 |
|
|
|
0 |
1 |
0 |
1 |
|
+ |
0 |
0 |
1 |
1 |
|
|
1 |
0 |
0 |
0 |
|
|
|
|
|
|
Sytuacja podobna jak w przypadku dodawania.
W powyższy sposób można w komputerze przedstawić liczby całkowite typu Unsigned Integer, czyli liczby całkowite bez znaku.
W celu przedsatwienia liczb całkowitych ze znakiem (Signed Integer) stosuje się tak zwany MSB (Most Significat Bit). MSB jest pierwszym znakiem od lewej. Jeśli MSB = 0 to znak jest dodatni, jeśli MSB = 1, to znak jest ujemny.
Aby utworzyć liczbę ujemną z MSB, np: - 25, przeliczamy jej wartość bezwzględną (|-25|) na system dwójkowy ( 00011001 ). Następnie należy zmienić jej wszystkie znaki na przeciwstawne. Tzn jedynki na zera i zera na jedynki ( 11100110 ). Na końcu należy jeszce dodać 1.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
|
|
|
|
|
+ |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|
|
|
|
|
|
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-25 = 11100111
Możemy już przedstawić liczby dodatnie i ujemne, ale tylko całkowite.
Przydałaby się jeszcze możliwość operacji na ułamkach.
W systemie dziesiętnym liczbę 123,4567 można zapisać również jako:
( 1 x 100 ) + ( 2 x 10 ) + ( 3 x 1 ) + ( 4 x 1/10 ) + ( 5 x 1/100 ) + ( 6 x 1/1000 ) + ( 7 x 1/10000)
W podobny sposób można zapisać liczbę w sytemie dwójkowym:
1001,1101 = ( 1 x 8 ) + ( 0 x 4) + ( 0 x 2 ) + ( 1 x 1) + ( 1 x 1/2 ) + ( 1 x 1/4 ) + ( 0 x 1/8) + ( 1 x 1/16 )
a więc 1001,1101 = 9,8125
Przeliczanie z systemu dziesiętnego na system binarny
.......4,625 (10) na Z(2)
4,625 = 4 + 0, 625
4 |
|
0,625 |
|||||
4 / 2 = 2 |
i 0 reszty |
0 |
|
0,625 mnożymy razy 2 |
0,625 * 2 = 1 |
i 0,25 reszty |
1 |
4 / 2 = 2 |
i 0 reszty |
0 |
|
0,25 mnożymy razy 2 |
0,25 * 2 = 0 |
i 0,5 reszty |
0 |
4 / 2 = 2 |
I 1 reszty |
1 |
|
0,5 mnożymy razy 2 |
0,5 * 2 = 1 |
i 0 reszty |
1 |
|
|
|
|
|
|
|
|
4,625 = 100,101 a dokładniej 0100,1010
Zróbmy jeszcze z 4,625 liczbę ujemną - 4,625
0100,1010 odwracamy watości >> 1011,0101 i dodajemy 1 ale w taki sposób jakby nie było żadnego przecinka:
Carry: |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
+ |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|
|
|
|
|
|
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a więc - 4,625 = 1011,0110