Dátový typ celé číslo

Pri ukladaní celého čísla do pamäte sa môžeme rozhodnúť, či použijeme 1 byte, 2 byty, 4 byty alebo viac. Čím viac pamäťových bytov použijeme, tým väčšie číslo si môžeme zapamätať. Pomenovanie a definícia typov celočíselných premenných sa môže meniť podľa architektúry a jazyka.

Najmenšia pamäťová jednotka, ktorú môžeme použiť na pamätanie si čísla je byte, čo je 8 bitov, teda 28 = 256 rôznych môžností. Môžeme sa rozhodnúť, či v rámci týchto možností, si budeme pamätať čísla 1..256 alebo 0..255 alebo -127..128 alebo -128..127 alebo 7…262 🙂

Nuž ale nerozhodujeme sa vlastne my sami, ale tí, čo vyrábajú počítače. Vymysleli, že budú 2 možnosti:

  • Bez znamienka (unsigned) 0..255
  • So znamienkom (signed) -127..127 alebo -128..127

Bez znamienka je to jednoduché, tam niet čo vymýšľať. Jednoducho číslo je reprezentované v dvojkovej sústave. Napr. 00000110 = 6

So znamienkom je to už trochu ťažšie vymyslieť. Ako budeme reprezentovať záporné čísla, napríklad mínus 6? Rôzne múdre hlavičky vymysleli rôzne riešenia:

Prvý bit je znamienko
Ak je najľavejší bit 0, je to kladné číslo, ak je 1, tak je to záporné číslo. Zvyšných 7 bitov je číslo reprezentované v dvojkovej sústave. Napr. 10000110 = -6

Najväčšie číslo: 01111111 = +27-1 = +127
Nula: 00000000 = +0
Nula: 10000000 = -0
Najmenšie číslo: 11111111 = -27-1 = -127

Komplement – záporné číslo sú opačné bity
Kladné čísla sú reprezentované siedmymi bitmy v dvojkovej sústave, záporné čísla sú všetkých osem bitov prehodených na opačné (komplementárne, negované). Napr.
11111001 = -6

Najväčšie číslo: 01111111 = +27-1 = +127
Nula: 00000000 = +0
Nula: 11111111 = -0
Najmenšie číslo: 10000000 = -127

Zväčšený komplement – záporné číslo sú opačné bity plus jedna
Kladné čísla sú reprezentované siedmymi bitmy v dvojkovej sústave, záporné čísla sú všetkých osem bitov prehodených na opačné a pričítaná jednotka.

Najväčšie číslo: 01111111 = +27-1 = +127
Jednotka: 00000001 = +20 = 1
Nula: 00000000 = 0
Mínus jedna: 11111110 + 1 = 11111111 = -1
Druhé najmenšie číslo: 10000000 + 1 = 1000001= -127
Najmenšie číslo: 10000000 = zvýšilo nepoužité, môže byť -128

Posun nuly
Usporiadajme všetky 8-bitové čísla v dvojkovej sústave od najmenšieho po najväčšie. Najmenšiemu priraďme najnižšiu hodnotu, ktorú chceme reprezentovať a najväčšiemu najvyššiu hodnotu. Nula sa tak v dvojkovej rteprezentácii dostane niekam do stredu.

Najväčšie číslo: 11111111 = +127
Nula: 10000000 = 0
Najmenšie číslo: 00000000 = -128

Mocnicnový základ mínus 2
Doteraz sme vždy uvažovali dvojkovú sústavu so základom 2. Skúsme si teraz vypočítať, aké čísla budú vychádzať, ak použijeme základ (-2):

00000000 = +0 = -0
00000001 = (-2)0 = 1
00000010 = (-2)1 = -2
00000011 = (-2)1 + (-2)0= -2+1 = -1

 

Počet bytov pamäte Používa sa najľavejší bit na reprezentáciu znamienka +-? Počet bitov pamäte reprezentujúcich číslo Najmenšie číslo Najväčšie číslo Pomenovanie v jazyku Pascal Pomenovanie v jazyku C++ Pomenovanie v jazyku PHP
1 áno (signed) 7 -128 alebo
-127
127 Shortint char x
1 nie (unsigned) 8 0 255 = 28-1 Byte unsigned char x
2 áno (signed) 15 -32 768 alebo
-32 767
32 767 Smallint or Integer short int x
2 nie (unsigned) 16 0 65 535 = 216-1 Word unsigned short int x
4 áno (signed) 31 -2 147 483 648 alebo
-2 147 483 647
2 147 483 647 Longint or Integer long int Integer
4 nie (unsigned) 32 0 4 294 967 295 = 232-1 Longword unsigned long int x
8 áno (signed) 63 -9 223 372 036 854 775 808 alebo
-9 223 372 036 854 775 807
9 223 372 036 854 775 807 Int64 long long int x
8 nie (unsigned) 64 0 18 446 744 073 709 551 615 QWord unsigned long long int x

Dátový typ určitej veľkosti je schopný reprezentovať len toľko čísel, koľko mu veľkosť pamäte umožňuje. Pri pokuse pamätať si väčšie číslo dochádza k chybnej aritmetike, alebo ku strate najdbytočných bitov, voláme to pretečenie. Viac >>