Celočíselné typy bez znamienka
Každá z troch celočíselných typov premenných, sa môže písať „bez znamienka“. Celočíselný typ so znamienkom napríklad typu premennej int
, má rozsah od -2 147 483 648 do 2 147 483 647.
Aký bude mať rozsah premenná typu int bez znamienka? 0 do 4 294 967 295. Na definovanie typu bez znamienka použijete v jazyku C++ slovo unsigned
.
Dáme si na unsigned príklad.
1. príklad: Použitie celočíselného typu bez znamienka
#include <iostream> //hlavičkové súbory #include <climits> using namespace std; //priestor mien int main() //funkcia main { int a = INT_MAX; //deklarácie premenných unsigned int b = a; cout << "Premenna a ma hodnotu: "<<a; //vypísanie na obrazovku cout << "\nPremenna b ma hodnotu: "<<b<<"\n"; a = a + 1; //operácie b = b + 1; cout << "\n"; cout << "Zväčšime premenne o +1\n"; cout << "\n"; cout << "Premenna a ma hodnotu: "<<a; cout << "\nPremenna b ma hodnotu: "<<b<<"\n"; cout << "\n"; cout << "Vynulujeme premenne a nasledne ich zmenšime o -1\n"; a = 0; b = 0; a = a – 1; b = b – 1; cout <<"\n"; cout << "Premenna a ma hodnotu: "<<a; cout << "\nPremenna b ma hodnotu: "<<b; cout << "\n"; }
Výstup:
Premenna a ma hodnotu: 2147483647 Premenna b ma hodnotu: 2147483647 Zväčšime premenne o +1 Premenna a ma hodnotu: -2147483648 Premenna b ma hodnotu: 2147483648 Vynulujeme premenne a nasledne ich zmenšime o -1 Premenna a ma hodnotu: -1 Premenna b ma hodnotu: 4294967295
Rozbor programu:
Najprv premenné inicializujeme na maximálnu hodnotu v rozsahu int. Následne ich vypíšeme. Zatiaľ nič neočakávane.
V druhom kroku premenným zvýšime hodnotu o 1. Čo sa stane? Pre premennú deklarovanú ako int prejde na maximálnu mínusovú hodnotu. Je to z dôvodu, že nepozná čísla mimo rozsah veľkosti danej premennej. Zatiaľ čo bez znamienka definovaná premenná sa zvýši 1 a je stále v rozsahu unsigned int
.
V treťom prípade pokúšame to isté, ale z druhej strany. Keďže unsigned int nepozná zápornú hodnotu, nastaví sa na najvyššiu možnú hodnotu.
Ako vyberať celočíselný typ premennej?
Všeobecne platí, že int má najprirodzenejšiu veľkosť celého čísla. Chápte to tak, že s int počítač pracuje najviac efektívne. Neexistuje žiadne pravidlo, ktoré by uprednostnilo ten typ celočíselnej premennej pred iným. Avšak, kedy by bolo vhodné vybrať si celočíselný typ premennej?
Napríklad máte definovať počet písmen v dokumente či populáciu ľudí. Viete, že tieto veličiny nemôžu byť záporne a tak použijete typ bez znamienka a zároveň tak dostanete dva krát väčší priestor. Ak chcete definovať veľmi veľké čísla, môžete použiť long. Ak programujete nejaké systémy s malou pamäťou, istotne radšej použijete short
.
Celočíselné konštanty
V jazyku C++ máte na výber tri druhy zápisu celočíselnej konštanty podľa číselného základu. Prvý je číselný základ podľa čísla 10. Tento spôsob zápisu každý dôverne pozná. Druhý je základ podľa 8. Používa sa hlavne v starších unixových systémoch.
Poznámka šéfredaktora: Asi nejčastějším použitím čísel v osmičkové soustavě (oktalových) je zápis klasických unixových oprávnění a jejich masek. Například hodnota 0644 znamená pro vlastníka souboru práva ke čtení a zápisu, pro skupinu a ostatní uživatele jen ke čtení.
Tretí zápis je podľa číselného základu 16. Známy je ako hexadecimálny.
Ako jazyk C++ rozlišuje tieto tri zápisy podľa základu? Ak má prvé číslo hodnotu od 1 do 9, potom hovoríme o desiatkovom čísle. Napríklad 23 je desiatkové číslo. Ak má prvá číslica hodnotu 0 a druhá od 1 do 7, potom číslo patrí do základu 8. Napríklad 023 je osmičkové číslo. 023 je v desiatkovej podobe číslo 19.
A čo hexadecimálne? Ako spozná jazyk tento druh zápisu? Ak má tvár 0x alebo 0X, tak číslo má základ 16. Číslo 0x23 má v desiatkovej sústave hodnotu 35.
Dáme si príklad.
2. príklad:
#include <iostream> //hlavičkový súbor using namespace std; //priestor mien int main() //funkcia main { int desiatkova = 23; //deklarácia premennej int osmickova = 023; int sestnastkova = 0x23; cout << "Prevod konštant do desiatkovej sústavy\n"; //vypísanie na obrazovku cout << "desiatkova: "<<desiatkova; cout << "\nosmickova: "<<osmickova; cout << "\nsestnastkova: "<<sestnastkova; cout << "\n"; }
Výsledok programu:
desiatkova: 23 osmickova: 19 sestnastkova: 35