Kurs C++ (2)
Systemy zapisu liczb
Istnieje dużo systemów zapisu liczb. Chodzi tu o to ile liczb możemy zapisać na jednej pozycji. Nas będą interesować 4 które są wykorzystywane w C++.
System binarny
Jest to podstawowy system, na którym jest oparta cała informatyka. Cechuje się tym że składa się z bitów. Bit jest to najmniejsza komórka która przechowuje informację. może przyjmować wartości tylko 1 albo 0.
Z ośmiu bitów składa się bajt. Macie pewnie pytanie w jaki sposób komputer poznaje wartość liczby, skoro są tam same zera i jedynki np (01001011)??
Każdy bit jest odpowiedzialny za jakąś konkretną wartość. Przyjrzyj się tabeli:
2n |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
2n= |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
n= |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Jak widzisz wszystko opiera się na potęgach dwójki. Tylko teraz trzeba to wytłumaczyć. Dla tego na potęgach dwójki że bit może przyjmować tylko 2 wartości (1 i 0). Natomiast n bitów tworzy 2n różnych od siebie kombinacji. Łatwo teraz policzyć ile będzie miała kombinacji liczba 8bitowa, czyli 1 bajtowa.
28=256 Często biorą się niuanse w zależności czy liczymy od zera czy od jedynki. Nie wytłumaczyłem jeszcze w jaki sposób przelicza się liczby binarne na dziesiętne Istnieje coś takiego jak bity o mniejszym i większym znaczeniu. Bity o najmniejszym znaczeniu znajdują się po prawej stronie a o największym znaczeniu po lewej. Wartość liczby jest to suma potęg dwójki za które są odpowiedzialne poszczególne bity. Bit 0 jest odpowiedzialny za 1, bit 4 za 16. Zacznijmy tak: Nasza suma na początku ma wartość 0. Idziemy od prawej do lewej. Jeżeli bit 0 ma wartość 1 dodajemy do sumy 20 czyli 1, jeżeli wartość bitu drugiego jest 1 dodajemy do sumy 21 czyli 2, i tak n razy. Proponuję poprzeliczać sobie troszeczkę na kartce a potem sprawdzić z kalkulatorem, np w wIndows (widok kalkulatora profesjonalny).
Język C++ niestety nie posiada obsługi zapisu liczb binarnych. Trzeba je najpierw przeliczyć na jeden z poniższych. Istnieje jeszcze takie pojęcie jak starsze i młodsze bity w bajcie. Przez starsze rozumiemy 4 bardziej znaczące bity (te od lewej), a przez młodsze 4 mniej znaczące bity (te od prawej).
System ósemkowy
Jest to najmniej chyba stosowany system. Aczkolwiek łatwo go pojąć. Pojedyncze miejsce może przybierać wartości od 0 - 7, czyli tyle co mają 3 bity. Jeżeli przyjmie większą wartość to dodaje się z przodu jedynkę. Jest to tak jak z liczbami dziesiętnymi, tylko liczy się do siedmiu.
W C++ zapisuje się taką liczbę zawsze z zerem na początku. Np. 07564132
System dziesiętny
Jeżeli ktoś chodził do podstawówki, to w 1 klasie uczyli go systemu dziesiętnego. Jego zapis w C++ jest że tak powiem normalny. Jeżeli nie występuje żaden wyróżnik na początku, to komopilator traktuje liczbę jako liczbę dziesiętną
System szesnastkowy
Jest to najbardziej rozpowszechniony system w informatyce. Pojedyńczy znak przybiera wartości od 0-15, czyli tyle co 4 bity. Bardzo ładnie odwzorowywuje starsze i młodsze bity w bajcie. Powstaje pewnie pytanie jak na jednym miejscu cyframi zapisać wartości od 0 do 15. od 0 do 9 pisze się cyframi, a od 10 - 15 kolejnymi literami alfabetu A-F Zapis w C++ takiej liczby musi być poprzedzony zerem i x. Np liczba 1 bajtowa ma postać: 0x3F. Wielkość litery x i liter oznaczających wartość A-F nie ma znaczenia. Będę używał różnego zapisu.
Przykładowa tabela wartości liczb w różnych systemach
Binarnie |
Ósemkowo |
Dziesiętnie |
Szesnastkowo |
0000 |
00 |
0 |
0x00 |
0001 |
01 |
1 |
0x01 |
0010 |
02 |
2 |
0x02 |
0011 |
03 |
3 |
0x03 |
0100 |
04 |
4 |
0x04 |
0101 |
05 |
5 |
0x05 |
0110 |
06 |
6 |
0x06 |
0111 |
07 |
7 |
0x07 |
1000 |
010 |
8 |
0x08 |
1001 |
011 |
9 |
0x09 |
1010 |
012 |
10 |
0x0A |
1011 |
013 |
11 |
0x0B |
1100 |
014 |
12 |
0x0C |
1101 |
015 |
13 |
0x0D |
1110 |
016 |
14 |
0x0E |
1111 |
017 |
15 |
0x0F |
10000 |
020 |
16 |
0x10 |
... |
... |
... |
... |
Autor: Adam Bywalec
http://adambyw.fm.interia.pl
Opracował: Adam Sawicki "Regedit"
|