русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Преобразования типов

Язык С++ достаточно свободно обращается с выражениями, включающими в себя различные типы данных. В С++ различают неявное преобразование типов и явное. Неявное преобразование типов в выражениях со смешанными типами данных осуществляется автоматически компилятором согласно иерархии типов данных, по которой у каждого типа данных имеется свой приоритет по отношению к другим типам. Приведём иерархию типов данных, перечислив основные типы по старшинству, от низшего к высшему: char [ short [ int [ long int [ float [ double [ long double. Таким образом, если в арифметическом выражении присутствуют операнды различного типа, то в этом случае операнд с более "низким" типом будет преобразован компилятором к более "высокому" типу. Рассмотрим пример:

#include <iostream>

#include <conio>

using namespace std;

int main() {

int i = 7;

float f = 1.5;

double d = i * f;

cout <<"Результат равен " << d << endl; // d=10.5

getch(); return 0;

}

При компиляции данной программы, тип int переменной i автоматически преобразовывается в вещественный тип, а затем результат умножения преобразовывается к типу double. Однако, необходимо помнить, что в ряде случаев (особенно при целочисленных вычислениях) могут возникать ошибки из-за того, что компилятор не осуществляет преобразования типов.

#include <iostream>

#include <conio>

using namespace std;

int main() {

int a = 5, b = 2;

a=a/b*10;

cout <<"Результат равен " << a << endl; // a=20 - ошибка. Должно быть 25

getch(); return 0;

}

Из-за того, что в данной программе происходит деление величин целого типа, возникает ситуация, когда получающаяся в результате деления дробная часть отбрасывается, из-за того, что эти величины определены как целые. В итоге мы получаем неправильный ответ 20, вместо 25. Для решения этой проблемы можно определить переменные a и b как float, а можно осуществить явное преобразование типов следующим образом.

int main() {

int a = 5, b = 2;

a = static_cast<float>(a) / b * 10.0; //преобразовываем переменную а к вещественному типу

cout <<"Результат равен " << a << endl; // a=25

getch();

return 0;

}

Здесь, с помощью оператора явного приведения типов static_cast<новый тип> (переменная)мы устранили ошибку. Наряду с таким способом приведения типов, существуют другие способы в стиле С: a = float(a) / b * 10.0; или a = (float)a / b * 10.0;. Недостаток последних двух форматов заключается в том, что их трудно найти в большом коде программы как визуально, так и с помощью команды поиска.

Просмотров: 513


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.