Poniedziałek 05 Maj 2025r. Godz 00:00:00      
Postów: 251      

Systemy zapisu liczb w C++

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 dzisię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.

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
... ... ... ...