Целобројни тип података

Променљиве целобројног типа служе за представљање (памћење) целих бројева. Оне имају свој тип, вредност и име. Опсег вредности из којег променљиве добијају вредност зависи од декларације, а може да зависи и од архитектуре рачунарског система и компајлера. У општем случају важи следеће:

ТИП ВЕЛИЧИНА ОПСЕГ ВРЕДНОСТИ
int 2 или 4 бајта од -32.768 до 32.767 или од -2.147.483.648 до 2.147.483.647
unsigned int 2 или 4 бајта од 0 до 65.535 или од 0 до 4.294.967.295
short 2 бајта од -32.768 до 32.767
unsigned short 2 бајта од 0 до 65.535
long 4 бајта од -2.147.483.648 до 2.147.483.647
unsigned long 4 бајта од 0 до 4.294.967.295

Напомена: знаковни тип (char, signed char, unsigned char) такође припада целобројном типу, али ће о њему бити речи касније.

Уколико не знамо величине које се додељују меморијским локацијама на сопственом систему, то можемо проверити користећи sizeof(тип_података) који ће нам вратити вредност у бајтовима:

#include 
main()
{
	printf("Velicina int: %d \n", sizeof(int));
	printf("Velicina short: %d \n", sizeof(short));
	printf("Velicina unsigned: %d \n", sizeof(unsigned));
	printf("Velicina long: %d \n", sizeof(long));
}

што на нашим системима (Windows 7 x86, Visual Studio 2010 или Windows 10 x64, Visual Studio 2017) даје резултат:

Velicina int: 4
Velicina short: 2
Velicina unsigned: 4
Velicina long: 4

На исти начин можемо проверити величину меморијских локација за остале типове.

Целобројне променљиве декларишу се у програму на следећи начин:

int prom_1, prom_2, ... prom_n;

или

int prom_1;
int prom_2;
...
int prom_n;

где су prom_1, prom_2… имена променљивих. Име променљиве може да садржи мала и велика слова, бројеве и знак _. Име променљиве не сме почети бројем.


Задатак: Опишите шта је декларисано у следећем примеру:

int a, b, c;
unsigned d;
long e;

У задатку су декларисане целобројне променљиве a, b и c, неозначена целобројна променљива d и дугачка целобројна променљива e.


Целобројне константе

Цели бројеви представљају се низом цифара којима претходи знак + или знак -, где се знак + може изоставити уколико је број позитиван.

Целобројна константа је декадан број уколико не почиње нулом!

Целобројна константа која почиње нулом третира се као октална!

Целобројна константа која почиње са 0x или 0X третира се као хексадекадна!

Значи, није исто 12 или 012 или 0х12:

  • 12 је декадна константа којој је и декадна вредност 12
  • 012 је октална константа којој је декадна вредност 10
  • 0х12 је хексадекадна константа којој је декадна вредност 18

Константе које су превелике да би биле смештене у меморијски простор предвиђен за константе int типа третирају се као long константе и означавају се навођењем l или L иза броја. На пример 987654321L.


Задатак: Које декадне вредности имају декларисане константе x, y и z:

int x=10;
int y=010;
int z=0x10;

Декларисане константе имају следеће декадне вредности х=10, у=8, z=16.


Основне конверзије за целобројни тип

Сваки тип податка има сопствени симбол конверзије који се користи при улазно/излазним операцијама. Симболи конверзије које користимо за испис целобројних типова су:

d – цео декадни број

u – цео декадни неозначен број

о – цео октални неозначен број

х, Х – цео хексадекадни неозначен број

У случају целобројних long аргумената дописује се знак l испред d, u, o, x, X.

Ако се при спецификацији целих хексадекадних бројева наведе Х, онда се за цифре веће од 9 користе А, B, C, D, E, F, односно, ако се наведе х, онда се користе a, b, c, d, e, f.

Најпростији облик спецификације конверзије је навођење симбола % испред симбола конверзије.


Пример 1. Демонстрираћемо декларацију променљивих, доделу декадних, окталних и хексадекадних вредности и потом испис њихових декадних вредности (користећи %d). Шта смо добили на излазу?

#include 
main() 
{
	int x, y, z;
	x = 10;
	y = 010;
	z = 0x10;
	printf("Deklarisana vrednost x je %d \n", x);
	printf("Deklarisana vrednost y je %d \n", y);
	printf("Deklarisana vrednost z je %d \n", z);
}

Пример 2. Демонстрираћемо декларацију променљивих, доделу декадних вредности, основне аритметичке операције које смо користили и у окружењу за израду алгоритамских шема и на крају испис резултата, такође користећи %d.

#include 
main()
{
	int x, y, a, b, c, d, e;
	x = 10;
	y = 3;
	a = x + y;
	b = x - y;
	c = x * y;
	d = x / y;
	e = x % y;
	printf("x + y = %d \n", a);
	printf("x - y = %d \n", b);
	printf("x * y = %d \n", c);
	printf("x / y = %d \n", d);
	printf("ostatak pri x / y = %d \n", e);
}

На излазу смо добили:

x + y = 13
x - y = 7
x * y = 30
x / y = 3
ostatak pri x / y = 1
Press any key to continue . . .

Приметићете да ако смо дефинисали све променљиве као целе приликом дељења се децимална тачка и разломљени део резултата одбацују.


Напомена: детаљније о излазу, улазу, конверзијама и операторима у наредним лекцијама – овде смо их користили само ради демострације.


Знаковни тип

Променљиве типа char служе за представљање (памћење) појединачних карактера, односно знакова. Персонални рачунари за памћење знакова користе стандардни ASCII бинарни 7 битни кôд који се у меморији представља једним бајтом, односно са 8 бита. Бинарно кодирани знак памти се у меморији као цео број и њега називамо малим целобројним податком.

ASCII Table

На пример, знак A еквивалентан је декадној вредности 65, знак a декадној вредности 97 итд.

ТИП ВЕЛИЧИНА ОПСЕГ ВРЕДНОСТИ
char 1 бајт од -128 до 127 или од 0 до 255
unsigned char 1 бајт од 0 до 255
signed char 1 бајт од -128 до 127

Променљивој типа char, unsigned char или signed char, увек се додељује само једна 8-битна меморијска локација. Испред имена типа char може се навести signed да би се назначило да се ради о означеном малом целобројном податку, односно unsigned да би се назначило да се ради о неозначеном малом целобројном податку. Из табеле изнад можемо видети да сва три типа заузимају исти меморијски простор, али не и исти интервал – signed char може да има вредности од -128 до 127, а unsigned char од 0 до 255.

Знаковне променљиве декларишу се у програму на следећи начин:

char x, y;
unsigned char a, b;
signed char m, n;

Знаковне константе

Знаковне константе задају се стављањем одговарајућег знака између два апострофа. На овај начин се могу задати сви знаци осим специјалних (обрнута коса црта, наводник, апостроф и упитник).

На пример:

'x'

је исправно задатака знаковна константа док је

'?'

неисправно задата знаковна константа.

Знаковне константе могу се задати и помоћу декадних, окталних и хексадекадних вредности. Да би знаковну константу навели помоћу декадне вредности, једноставно наводимо декадну вредност знака из ASCII табеле. Окталне вредности наводе се иза обнуте косе црте \, а хексадекадне иза \x или \X (у зависности да ли користимо abcdef или ABCDEF).

На пример, знак W можемо задати на више начина: као ‘W’ или као 87 или као \127 или као \x57.

Управљачки знаци

Испред управљачких знакова увек претходи обрнута коса црта \ и њих називамо прелазним знацима (енгл. escape characters или escape sequences).

УПРАВЉАЧКИ ЗНАК ЗНАЧЕЊЕ
\a Звоно (аларм) / Bell (alert)
\b Једно место уназад / Backspace
\f Нова страница / Formfeed
\n Нови ред / New line
\r Почетак реда / Carriage return
\t Хоризонтални таб / Horizontal tab
\v Вертикални таб / Vertical tab
\’ Апостроф / Single quotation mark
\” Наводник / Double quotation mark
\\ Обрнута коса црта / Backslash
\? Упитник / Literal question mark
\0 Nul знак / NULL
\ooo ASCII у окталној нотацији
\xhh ASCII у хексадекадној нотацији
\Uhhhhhhhh UNICODE у хексадекадној нотацији*
\uhhhh UNICODE у хексадекадној нотацији*

*важи од С99 стандарда па на даље…

За Microsoft C/C++ компајлер важи, да уколико иза обрнуте косе црте наведемо знак који се не налази у табели изнад, он ће бити представљен као сам знак. На пример, \c ће бити представљено као c.

Основна конверзија за знаковни тип

Симбол конверзије кога користимо за испис за знаковни тип је c. Најпростији облик спецификације конверзије је навођење симбола % испред симбола конверзије.


На пример:

#include <stdio.h>
main()
{
	char x, y, z;
	x = 'A'; 
	y = 66; 
	z = '\x43';
	printf("Promenljiva\t Znak\t\t Dekadna vrednost\n");
	printf("x\t\t %c\t\t %d\n", x, x);
	printf("y\t\t %c\t\t %d\n", y, y);
	printf("z\t\t %c\t\t %d\n", z, z);
}

Извршавањем овог програма добијамо:

Promenljiva      Znak            Dekadna vrednost
x                A               65
y                B               66
z                C               67
Press any key to continue . . .

Неовлашћено коришћење ових садржаја, без претходне писмене сагласности аутора, сматра се кршењем Закона о ауторским и сродним правима!