Конверзија типа

У програмском језику C дозвољено је да се у нумеричким изразима користе операнди различитих типова. Пошто бинарни оператори захтевају да оба операнда имају исте типове, у случајевима када то није испуњено, тип једног од операнада се аутоматски претвара у тип другог и ствара се резултат тог заједничког типа. Просто правило за аутоматску конверзију гласи: тип операнда једноставнијег типа се претвара у тип операнда сложенијег типа и онда се израчунава резултат оператора. Тип резултата је тип операнда сложенијег типа. Из овога следи да ако је један од операнада типа float или double и други се претвара у тај тип, и резултат је одговарајућег типа.

У случају потребе, тип податка може се експлицитно претворити у жељени тип помоћу префиксног унарног cast оператора облика:

(име_типа)

Напомињем да код оператора / ако су оба операнда цели бројеви и резултат је цео број (само се одбацује разломљени део!). Да би смо добили реалан резултат неопходно је да један од операнада буде реалан. Тако да је у оваквим случајевима врло често неопходно користити експлицитну конверзију типа.

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

#include<stdio.h>
main()
{
int a;
float b;
printf("unesi a");scanf("%d",&a);
b=1/a;
printf("b=%.2f",b);
}

и добијамо следећи резултат приликом извршавања програма:

Дакле, неопходно је обезбедити да бар један од операнада у изразу 1/a буде реалан. То се може постићи на неколико начина:

1.

#include<stdio.h>
main()
{
int a;
float b;
printf("unesi a");scanf("%d",&a);
b=1./a;
printf("b=%.2f",b);
}

Дакле, додавањем тачке на број у бројиоцу (1.) добили смо реалан број, што се види након извршавања програма:

2.

#include<stdio.h>
main()
{
float a;
float b;
printf("unesi a");scanf("%f",&a);
b=1/a;
printf("b=%.2f",b);
}

У овом случају смо променили тип променљиве a, што је у већини случајева лако изводљиво. Резултат извршавања програма поново показује исправно (и очекивано) понашање програма:

3.

#include<stdio.h>
main()
{
int a;
float b;
printf("unesi a");scanf("%d",&a);
b=1/(float)a;
printf("b=%.2f",b);
}

За разлику од претходног начина, где смо тип променљиве променили тако да је променљива у целом програму типа float, овде смо користили експлицитну конверзију ( (float) ) која важи само у изразу, односно наредби: b=1/(float)a; Овакав начин се препоручује у случајевима када променљива a НЕ СМЕ бити реалан податак (променљива која представља бројач или границу у for циклусу). Резултат извршавања:

Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s