При вычислении выражений некоторые операции требуют, чтобы операнды имели соответствующий тип, в противном же случае на этапе компиляции выдается сообщение об ошибке. Например, операция взятия остатка от деления (%) требует целочисленных операндов. Поэтому в языке С++ есть возможность приведения значений одного типа к другому.
Формат операции преобразования типов:
имя_типа (операнд)
Например, int(x), float(2/5), long(x+y/0.5).
Пример 1.
//Взятие цифры разряда сотых в дробном числе
#include <stdio.h>
void main(){
float s,t;
long int a,b;
printf("Введите вещественное число\n");
scanf("%f", &s);
t=s*100;
a=int(t);
//переменная t приводится к типу int в переменную a
b=a%10;
printf("\nЦифра разряда сотых числа %f равна %d.",s,b);
}
Преобразования типов нужно применять с осторожностью, так как данная операция может приводить к потере информации. Например, после приведения длинного типа к более короткому происходит усечение информации из старших битов.
Пример 2.Временной интервал
Заданы моменты начала и конца некоторого промежутка времени в часах, минутах и секундах (в пределах одних суток). Найти продолжительность этого промежутка в тех же единицах.
Исходными данными для этой задачи являются шесть целых величин, задающих моменты начала и конца интервала, результатами – три целых величины (тип int).
Назовем переменные для хранения начала интервала hour1, min1 и sec1, для хранения конца интервала – hour2, min2 и sec2, а результирующие величины – hour, min и sec.
Для решения этой задачи необходимо преобразовать оба момента времени в секунды, вычесть первый из второго, а затем преобразовать результат обратно в часы, минуты и секунды. Следовательно, потребуется промежуточная переменная sum_sec, в которой будет храниться величина интервала в секундах. Она может иметь весьма большие значения, ведь в сутках 86400 секунд, что выходит за пределы типа int. Следовательно, для этой переменной выберем длинный целый тип (long int, сокращенно long).
Для перевода результата из секунд обратно в часы и минуты используется отбрасывание дробной части при делении целого числа на целое.
//Временной интервал. Форматированный ввод-вывод данных
#include <stdio.h>
void main () {
int hour1, min1, sec1, hour2, min2, sec2, hour, min, sec;
long int sum_sec;
printf("Введите время начала интервала (час мин сек)\n");
scanf("%d%d%d", &hour1,&min1,&sec1);
printf("Введите время окончания интервала (час мин сек)\n");