КАТЕГОРИИ: Архитектура-(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) |
Тип результата выражения арифметической бинарной операции
Приоритеты и порядок выполнения операций, тип результата выражения Для вычисления значений используются выражения, которые состоят из операндов, знаков операций и скобок. Операнды задают данные для вычислений. Операции задают действия, которые необходимо выполнить. Каждый операнд является, в свою очередь, выражением или одним из его частных случаев, например, константой или переменной. Если в одном выражении присутствуют несколько разных операций, то они выполняются в соответствии с приоритетами – в первую очередь выполняются операции с более высоким приоритетом. Каждая операция в Си++ имеет свой приоритет, всего существует 16 классов приоритетов (в Си было 15 классов, отсутствовали операции для работы с указателями на элементы класса). Если в одном выражении присутствует несколько одинаковых операций, то они могут выполняться или слева направо или справа налево, это определяет такое свойство операций, которое называется ассоциативностью (порядок выполнения операции в выражении). Приоритеты и ассоциативность операций языка Си++ представлены в таблице 3.1, операции в таблице представлены в порядке убывания приоритета. Для изменения порядка выполнения операций используются круглые скобки. Примеры: y = a + b * 10; // В первую очередь выполняется *, затем +, далее = y = (a + b) * 10; // В первую очередь выполняется + (из- за скобок), затем *, далее = a = b = c = 100; // Операции = выполняются справа налево, // всем переменным будет присвоено значение 100 Таблица 3.1 – Приоритеты и ассоциативность операций языка Си++
Рассмотрим, что будет, если в арифметической бинарной операции (+ - * /) присутствуют два операнда разных типов, в этом случае существуют правила, по которым можно определить тип результата выражения. Происходит следующее приведение типов по умолчанию, тип результата будет соответствующий: - все операнды типа float преобразуются к типу double; - если один из операндов имеет тип double (long double), то второй тоже приводится к double (long double); - если один имеет тип unsigned long, то второй также преобразуется к unsigned long; - если один имеет тип long, то второй также преобразуется к long; - если один имеет тип unsigned int, то второй также преобразуется к unsigned int; - если операнды целые меньшей размерности, чем тип int (unsigned int), то знаковые приводятся к типу int, беззнаковые к unsigned int; - иначе оба операнда имеют тип int. Рассмотрим пример, демонстрирующий особенности правил определения типа результата операции, подобная ситуация часто приводит к ошибкам в вычислении: double x=3/2; Значение переменной x будет равно 1.0 (а не 1.5, как кажется внешне), это связано с тем, что два операнда являются константами типа int, следовательно, результат операции имеет тип int, дробная часть при этом отбрасывается, далее целая 1 приводится к вещественному типу. Что устранить ошибку, связанную с потерей дробной части достаточно один из операндов сделать вещественным: double x=3./2; В заключение рассмотрим пример вычисления некоторого выражения. Даны x, y (значения вводятся с клавиатуры). Вычислить a, если Все значения вещественные. Пример программы представлен ниже. #include <stdio.h> #include <math.h> void main() { double x, y, a; // Определение переменных // Ввод исходных данных printf("x="); scanf("%lf", &x); printf("y="); scanf("%lf", &y); // Вычисляем значение выражения a=(sqrt(fabs(x-1))-pow(fabs(y), 1./3)) / (1+x*x/2+y*y/4); printf("a=%f", a); } В данном примере используются стандартные математические функции, заголовки которых находятся в подключенном заголовочном файле math.h. Заголовки некоторых полезных математических функций представлены в таблице 3.2. Таблица 3.2 - Некоторые математические функции
Дата добавления: 2014-01-11; Просмотров: 288; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |