Мегаобучалка Главная | О нас | Обратная связь


ПРИОРИТЕТ И ПОРЯДОК ВЫЧИСЛЕНИЙ



2016-09-15 323 Обсуждений (0)
ПРИОРИТЕТ И ПОРЯДОК ВЫЧИСЛЕНИЙ 0.00 из 5.00 0 оценок




 

Приоритет представляет собой основное правило определения порядка вычисления выражений.

Операции + и - имеют одинаковое старшинство, которое младше одинакового уровня старшинства операций *, / и %, которые в свою очередь младше унарного минуса. Арифметические операции группируются слева направо.

Приоритет арифметических операций показан в таблице 3.5.

 

Таблица 3.5 – Операции в порядке уменьшения приоритета

 

Операция Порядок вычислений
( ) Слева направо
- (унарный) Справа налево
* ./ Слева направо
+ - Слева направо
= (присваивание) Справа налево

 

Например, в нижеприведенных выражениях цифрами показана последовательность выполнения операций

 

a * b – c /d * f + g +h

1 4 2 3 5 6

 

скобки меняют последовательность выполнения операций:

 

a * b – ( c / (d * f ) + g )+h

4 5 2 1 3 6

 

 

ПРЕОБРАЗОВАНИЯ ТИПОВ ПРИ ВЫПОЛНЕНИИ ОПЕРАЦИЙ

Если в бинарной операции участвуют операнды различных типов, то перед выполнением операции "низший" тип преобразуется к "высшему", и получается результат "высшего" типа. Более точно, к каждой арифметической операции применяется следующая последовательность правил преобразования.

Типы char и short преобразуются в int, а float в double.

 

Если один из операндов имеет тип double, то другой преобразуется в double, и результат имеет тип double.

Если один из операндов имеет тип long, то другой преобразуется в long, и результат имеет тип long.

Все переменные типа float в выражениях преобразуются в double; в языке C++ вся плавающая арифметика выполняется с двойной точностью.

 

ОПЕРАТОР ПРИСВАИВАИВАНИЯ =

 

Имеет вид:

 

ПЕРЕМЕННАЯ = ВЫРАЖЕНИЕ;

 

Присваивает значение выражения справа от знака операции = переменной слева от знака.

Например:

 

a = b* c /f +k;

Переменной а присваивается результат вычисления выражения, записанного справа.

 

Допускается множественное присваивание, например:

a = b = c = d = 1;

 

Операторы присваивания, в которых и в левой и в правой частях встречается одно и то же имя переменной, например:

 

a = a + b;

d = d * m;

x = x / y;

могут быть записаны короче:

a + =b;

d * =m;

x / = y;

Эти записи не только короче, но и больше соответствуют человеческому мышлению, так как мы говорим: “увеличить переменную а на величину переменной b”.

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

 

int i;

char c;

 

i = c;

c = i;

 

значение 'с' не изменяется. Это верно независимо от того, вовлекается ли знаковое расширение или нет.

Если х типа float, а i типа int, то как

 

х = i;

так и

i = х;

приводят к преобразованиям; при этом float преобразуется в int отбрасыванием дробной части. Тип double преобразуется во float округлением. Длинные целые преобразуются в более короткие целые и в переменные типа char посредством отбрасывания лишних битов высокого порядка.

 

 

ОПЕРАЦИИ УВЕЛИЧЕНИЯ И УМЕНЬШЕНИЯ

 

В языке C++ предусмотрены две необычные операции для увеличения и уменьшения значений переменных. Операция увеличения ++ (инкремент) добавляет 1 к своему операнду, а операция уменьшения – (декремент) вычитает 1.

Необычный аспект заключается в том, что ++ и -- можно использовать либо как префиксные операции (перед переменной, как в ++n), либо как постфиксные (после переменной: n++). Эффект в обоих случаях состоит в увеличении n. Но выражение ++n увеличивает переменную n до использования ее значения, в то время как n++ увеличивает переменную n после того, как ее значение было использовано. Это означает, что в контексте, где используется значение переменной, а не только эффект увеличения, использование ++n и n++ приводит к разным результатам. Если n = 5, то

 

х = n++;

 

устанавливает х равным 5, а

 

х = ++n;

 

полагает х равным 6. В обоих случаях n становится равным 6. Операции увеличения и уменьшения можно применять только к переменным; выражения типа х=(i+j)++ являются незаконными. В случаях, где нужен только эффект увеличения, а само значение не используется, как, например, в

 

n++;

 

выбор префиксной или постфиксной операции является делом вкуса, но встречаются ситуации, где нужно использовать именно ту или другую операцию.

 

ОПЕРАЦИИ ОТНОШЕНИЙ

 

Бинарные операции отношений сравнивают первый операнд со вторым и вырабатывают значение 1(true, то есть истина) и 0 (false, то есть ложь). Типом результата является int. Имеются следующие операции отношений:

 

Операция Отношение

 

<Первый операнд меньше, чем второй операнд

>Первый операнд больше, чем второй операнд

<=Первый операнд меньше или равен второму операнду

>=Первый операнд больше или равен второму операнду

= = Первый операнд равен второму операнду

!= Первый операнд не равен второму операнду

 

Типы первого и второго операндов могут различаться. Обычные арифметические преобразования выполняются над целыми и плавающими операндами.

 

int x = 1, y = 1;

 

x < y /* выражение 1 */

y > x /* выражение 2 */

x <= y /* выражение 3*/

x >= y /* выражение 4 */

x = = y /* выражение 5 */

x != y /* выражение 6 */

 

В этом примере x и y равны, поэтому выражения 3,4 и 5 имеют значение 1 (истина), а выражения 1,2 и 6 имеют значения 0 (ложь).

Приоритет операций отношений меньше, чем у арифметических операций. Это означает, например, что выражение

i < lim – 1;

эквивалентно выражению

i < ( lim – 1 );

 

МАТЕМАТИЧЕСКИЕ БИБЛИОТЕЧНЫЕ ФУНКЦИИ

 

Математическими называют функции, с помощью которых вычисляются тригонометрические, логарифмические, экспоненциальные и другие функции. Использование математических функций требует включения в текст программы заголовочного файла <math.h>. В этом файле определены прототипы математических функций, а также некоторые математические константы.

В таблице 1 приведены наиболее часто используемые математические функции. В этой таблице x имеет тип double, n – тип int. Все функции, кроме abs(n) возвращают значение типа double. Функция abs(n) возвращает значение целого типа.

 

Таблица 3.6 – Математические функции

 

Функция Назначение функции
sin(x) синус x
cos(x) косинус x
tan(x) тангенс x
asin(x) арксинус x
acos(x) арккосинус x
atan(x) арктангес x
exp(x) экспоненциальная функция е в степени x
log(x) натуральный логарифм ln(x), x>0
log10(x) десятичный логарифм lg(x), x>0
pow(x,y) х в степени у
sqrt(x) квадратный корень от х
abs(n) абсолютное значение целого аргумента n
fabs(x) абсолютное значение аргумента x типа double

 



2016-09-15 323 Обсуждений (0)
ПРИОРИТЕТ И ПОРЯДОК ВЫЧИСЛЕНИЙ 0.00 из 5.00 0 оценок









Обсуждение в статье: ПРИОРИТЕТ И ПОРЯДОК ВЫЧИСЛЕНИЙ

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (323)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.01 сек.)