Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Операции инкремента и декремента




Операторы префиксных (++х, --х) и постфиксных (х++, х--)  инкремента/декремента влияют на свои операнды. Они различаются между собой моментом выполнения инкремента/декремента при вычислении выражения. В префиксной форме (++х, --х) инкремент/декремент выполняется до использования значения при вычислении выражения, поэтому значение выражения отличается от значения операнда. В постфиксной форме (х++, х--)  инкремент/декремент выполняется после использования значения при вычислении выражения, поэтому значение выражения совпадает со значением операнда.

Оператор префиксного инкремента (++) /декремента (––) добавляет/вычитает единицу к операнду, который должен иметь l - value значение типа, отличного от const; результатом выражения является это инкрементированное/ декрементированное l - value  значение того же типа, как у операнда.

В результате применения постфиксного оператора инкремента (++)/ декремента (––) значение операнда увеличивается/уменьшается на одну единицу соответствующего типа, но значение выражения вычисляется до применения соответствующего оператора, а операция инкремента/декремента выполняется после вычисления операнда. Эта особенность возникает, только когда постфиксная операция инкремента/декремента выполняется в контексте выражения. Операнды для постфиксных операторов декремента должны иметь изменяемые (без модификатора const)   l - value начения арифметического или указательного типа. Результат имеет такой же тип, как и постфиксное-выражение.

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

Операнд типа указателя инкрементируется или декрементируется на значение размера объекта, к которому он относится. Инкрементированный указатель указывает на следующий объект, а декрементированный — на предыдущий.

 

тип операции операция содержание примеры

префиксная

++x увеличение значения операнда на 1 до использования его значения a=1; q = 2* ++a; àa=2; q=4
--x уменьшение значения операнда на 1 до использования его значения a=1; q = 2* --a; à a=0; q=0

постфиксная

x++ увеличение значения операнда на 1 после использования его значения a=1; q= 2*a++; à q=2; a=2;
x-- уменьшение значения операнда на 1 после использования его значения a=1; q= 2*a--; à q=2; a=0

 

Правило:

  1. при самостоятельном использовании префиксная и постфиксная операции выполняются одинаково, т.е. не важно, где стоит знак операции (++k, k++);
  2. в выражениях префиксная и постфиксная операции различаются:

в случае префиксной операции сначала изменяется значение переменной, перед которой стоит операция, а затем используется новое измененное значение;
в случае постфиксной операции сначала используется старое значение переменной, после которой стоит операция, затем оно изменяется;

  1. не применять ++ и -- к переменной, присутствующей более чем в одном аргументе функции (например, printf (“……..”, a, a * a++);).
  2. не применять ++ и -- к переменной, которая входит в выражение более одного раза (например, k = a / 2 + 5 * (1 +  a++);).
  3. операнд не может быть константой, применять операцию только к переменным.
  4. операндом может быть только l - value -выражение ( ++(j + k) – неверная запись).

-----------------------------------------------------------------------------------------

Операции равенства

Действие операций соответствует их математическому пониманию. Результатом операций является логическое значение true или false. Операции используются при формировании условий в условных операторах и циклах. Операции имеют одинаковый приоритет, более низкий, чем арифметические операции и операции отношения, и выполняются «слева направо».

 

тип операция примеры
бинарные ==!= a  !=  b  ==  c à (a!= b) == c 1     2

 

!!! Ошибочное употребление символа присваивания = вместо знака операции равно == приводит к семантическим ошибкам.

!!! Обратите внимание, что если int i=44,   а int j=24, то запись (i==j) дает значение false, а  (i=j) дает значение true. Объясните, почему.

Сравнение на равенство вещественных чисел имеет свои особенности.

Примеры сравнения вещественных чисел на равенство:

int main()

{

 float x = 1; 

 x += 0.5;        // значение x 1.5 имеет тип float

 bool b = (x == 1.5);   //константа 1.5 имеет тип double

// значение x и константа 1.5 представляются в 2 с/с точно, поэтому

 cout << b << endl; // 1 (true)!!!

_getch();

 return 0;

}

 

int main()

{

 float x = 1; 

 x += 0.1;       // значение x 1.1 имеет тип float

 bool b = (x == 1.1); //константа 1.1 имеет тип double

 // значение x и константа 1.1 представляются в 2 с/с бесконечным
 // числом, поэтому

 cout << b << endl; // 0 ( false )!!!

_getch();

 return 0;

}

НО!!!

int main()

{

 double x = 1; 

 x += 0.1;        // значение x = 1.1 имеет тип double

 bool b = (x == 1.1); //константа 1.1 имеет тип double

   // значения x и 1.1 представлены в 2 с/с числами одинаковой длины

 cout << b << endl; // 1 ( true )!!!

_getch();

 return 0;

}

 

int main()

{

 float x = 1;

 double z = 1.1;  

 x += 0.1;        // значение x==1.1 имеет тип float

 bool b =(x == z);     //z имеет тип double

    // значения x и z представлены в 2 с/с числами разной длины

 cout << b << endl; // 0 ( false )!!!

_getch();

 return 0;

}

 

Поэтому правильно надо записывать так:

 

 

 

-----------------------------------------------------------------------------------------





Поделиться с друзьями:


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 745 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Свобода ничего не стоит, если она не включает в себя свободу ошибаться. © Махатма Ганди
==> читать все изречения...

4394 - | 4095 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.