Dátový typ celé číslo – príklady

Pri ukladaní celého čísla do pamäte sa môžeme rozhodnúť, či použijeme 1 byte, 2 byty, 4 byty alebo viac.
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.

Príklad chybnej aritmetiky: V premennej veľkosti 1 byte so znamienkom máme uložené číslo 127 = 01111111. Chceme pričítať číslo 1. V dvojkovej sústave to bude 10000000, avšak podľa rôznych reprezentácií to môže byť v desiatkovej sústave číslo -0, -127, -128, +0.

Ukážka v jazyku Pascal: Ukážka v jazyku C:
Program CeleCislo;
var a:shortint;
begin
a := 127;
a := a+1;
writeln(a);
end.
#include
int main()
{
short int a = 32767;
a=a+1;
printf(„%d\n“,a);
return 0;
}

Príklad pretečenia: V premennej veľkosti 1 byte bez znamienka máme uložené číslo 255 = 11111111. Chceme pričítať číslo 1. V dvojkovej sústave to bude 1 00000000, pričom tú prvú jednotku strácame, v premennej ostáva len osem núl, výsledok je 0.

Ku strate ľavých bitov dochádza aj pri konverzii väčšieho typu na menší – vtedy sa z pôvodnej hodnoty skopíruje príslušný počet najnižších bitov do cieľovej hodnoty, a zvyšné bity sa jednoducho vynechajú. Ak je veľkosť pôvodného čísla v rozsahu cieľového typu, číslo zostane rovnaké. Ak je mimo tohto rozsahu, vynechaním bitov sa zmení jeho hodnota, môže dôjsť aj k zmene znamienka, z kladného čísla na záporné alebo zo záporného na kladné.

(V opačnom prípade, pri konverzii s menšieho typu na väčší sa jednoducho pridajú naľavo nuly.)

Príklad konverzie: číslo 2000 sa do 4 bytovej premennej uloží ako bity 00000000 00000000 00000111 11010000. Pri konverzii na 2 bytový typ zostanú bity 00000111 11010000, ktoré stále kódujú hodnotu 2000. Pri konverzii na 1 bytový typ však zostanú iba bity 11010000, ktoré kódujú hodnotu -48.

Ukážka v jazyku Pascal: Ukážka v jazyku C:
Program CeleCislo;
var a:longint;
var b:integer;
var c:shortint;
begin
a := 2000;
b := a;
c := b;
writeln(a);
writeln(b);
writeln(c);
end.
#include
int main()
{
long int a = 2000;
short int b = a;
char c = b;
printf(„%d\n“,a);
printf(„%d\n“,b);
printf(„%d\n“,c);
return 0;
}

Ukážkové zdrojové kódy si môžete nakopírovať do niektorého online kompilátora, napríklad
https://www.tutorialspoint.com/compile_pascal_online.php
https://www.tutorialspoint.com/compile_c_online.php

 

Vyskúšaj sa, ako zvládaš používanie celých čísel v jazyku C. Otestuj sa v krátkom kvíze.

Vyskúšaj sa, ako zvládaš používanie celých čísel v jazyku C. Otestuj sa v krátkom kvíze.