Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Операция явного приведения типа

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

Бинарных операций

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

При выполнении операций могут встречаться операнды различных типов. Но для выполнения операции оба операнда должны быть преобразованы к общему типу в соответствии с небольшим набором правил.

Типы операндов преобразуются к общему типу в порядке увеличения их "допустимого диапазона значений". Поэтому неявные преобразования всегда идут от "меньших" объектов к "большим". Схема выполнения преобразований операндов арифметических операций:

 

short, char ® int ® unsigned ® long ® double

float ® double

При этом действуют следующие правила:

- значения типов char и short всегда преобразуются в int (даже если оба операнда имеют одинаковый тип);

- аналогично, значения типа float всегда преобразуются в double;

- после этого определяется "старший" из двух типов операндов, и другой операнд преобразуется к этому типу. Порядок "старшинства":

 

long double

double

long long

unsigned long

long

unsigned int

int

 

Внимание: результатом 1/3 будет «0», чтобы избежать такого рода ошибок необходимо явно изменять тип хотя бы одного операнда, т.е. записывать, например: 1. / 3.

Типы char и int могут свободно смешиваться в арифметических выражениях, при этом каждая переменная типа char автоматически преобразуется в int. Это обеспечивает значительную гибкость при проведении определенных преобразований символов.

 

При присваивании значение правой части преобразуется к типу левой. И здесь необходимо быть внимательным, так как при некорректном использовании операций присваивания могут возникнуть неконтролируемые ошибки. Так, при преобразовании int в char старший байт просто отбрасывается.

Если объявлены: float x; int i; то как x=i; так и i=x; приводят к преобразованиям. При этом float преобразуется в int отбрасыванием дробной части.

Тип double преобразуется во float округлением.

Длинное целое преобразуется в более короткое целое и переменные типа char посредством отбрасывания лишних битов более высокого порядка.

При передаче данных функциям также происходит преобразование типов.

 

В любом выражении преобразование типов может быть осуществлено явно. Для этого достаточно перед любым выражением поставить в скобках идентификатор соответствующего типа.

Вид записи операции: (тип) выражение;

Ее результат - значение выражения, преобразованное к заданному типу представления.

Операция приведения типа вынуждает компилятор выполнить указанное преобразование, но ответственность за последствия возлагаются на програм­ми­ста. Рекомендуется использовать эту операцию в исключительных случаях.

Например:

double x;

int n=6, k=4;

1) x=n/k; - дробная часть будет отброшена

2) x=(double)n/k; - использование операции приведения типа здесь позволяет избежать округления результата деления целочисленных операндов.

Другой пример:

int i=100000, j=100000;

long long k;

k=(long long)i*j; - использование операции приведения типа здесь позволяет избежать переполнения типа int.

 

4.6. Операция «,» (запятая)

Данная операция используется для организации заданной последовательности вычисления выражений (обычно используется там, где по синтаксису допустима только одна операция, а необходимо разместить две и более, например, в операторе for). Форма записи:

выражение _1, …, выражение _ N;

выражения 1, 2,…, N вычисляются последовательно друг за другом и результатом операции становится значение последнего выражения N, например:

m = (i = 1, j = i ++, k = 6, n = i + j + k);

получим последовательность вычислений: i =1, j = i =1, i =2, k =6, n =2+1+6, и в результате m = n =9.

4.7. Приоритеты операций (по убыванию, чертой разделены разные приоритеты)

Операция Краткое описание Использование Порядок выполнения
Унарные операции
. Доступ к полю или методу объект. поле Слева направо
-> Доступ к полю или методу по указателю указатель -> поле
[] Индексирование переменная [ выражение ]
() Вызов функции ID(список_выр.)
++ Префиксный инкремент ++lvalue Справа налево
-- Префиксный декремент -- lvalue
++ Постфиксный инкремент lvalue ++
-- Постфиксный декремент lvalue--
~ Побитовое НЕ ~ выражение
! Логическое НЕ ! выражение
- Унарный минус - выражение
+ Унарный плюс + выражение
* Раскрытие указателя * выражение
& Адрес & выражение
sizeof Размер объекта или типа sizeof(выражение или тип)
() Приведение типа (тип) выражение
Бинарные и тернарная операции
* Умножение выражение * выражение Слева направо
/ Деление выражение / выражение
% Получение остатка выражение % выражение
+ Сложение выражение + выражение
- Вычитание выражениевыражение
<< Сдвиг влево выражение << выражение
>> Сдвиг вправо выражение >> выражение
< Меньше выражение < выражение
<= Меньше или равно выражение <= выражение
> Больше выражение > выражение
>= Больше или равно выражение >= выражение
== Равно выражение == выражение
!= Не равно выражение!= выражение
& Побитовое И выражение & выражение
^ Побитовое исключающее ИЛИ выражение ^ выражение
| Побитовое ИЛИ выражение | выражение
&& Логическое И выражение && выражение
|| Логическое ИЛИ выражение || выражение
?: Условная операция (тернарная) выражение? выражение: выражение
= Присваивание lvalue = выражение Справа налево
+= -= *= /= %= <<= >>= &= |= ^= Сложение, умножение и др. с присваиванием lvalue += выражение lvalue *= выражение lvalue <<= выражение и т.д.
, Последовательное вычисление выражение, выражение Слева направо
<== предыдущая лекция | следующая лекция ==>
Сокращенная запись операции присваивания | Консольные функции вывода данных на экран
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 402; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.