русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

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


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Операції присвоєння


Дата додавання: 2014-04-22; переглядів: 2615.


Операції присвоєння можна поділити на 2 групи:

1) унарні операції:

a. ++ (постфіксний і префіксний інкремент, збільшення на одиницю),

b. -- (постфіксний і префіксний інкремент, зменшення на одиницю);

2) бінарні операції:

a. = (звичайне присвоєння),

b. *= (множення з присвоєнням),

c. /= (ділення з присвоєнням),

d. %= (остача від ділення з присвоєнням),

e. += (додавання з присвоєнням),

f. -= (віднімання з присвоєнням),

g. &= (побітове І з присвоєнням),

h. ^= (побітове виключне І з присвоєнням),

i. |= (побітове АБО з присвоєнням),

j. <<= (зсування вліво з присвоєнням),

k. >>= (зсування вправо з присвоєнням).

На відміну від інших операцій, операції присвоєння змінюють значення свого операнда: для бінарних операцій лівий операнд набуває значення виразу, записаного справа від знака присвоєння, для унарних операцій – змінюється значення єдиного операнда даної операції. Тому операнд, якому присвоюється значення, повинен бути так званим l-операндом (l-value, left side value) – змінною розадресованим вказівником, тобто він має задавати адресу оперативної пам'яті, куди буде записане значення, яке присвоюється.

Результатом операції присвоєння є значення, яке набуває змінна (l-операнд) після присвоєння. Це значення можна використовувати як операнд у наступних операціях, для яких присвоєння є підвиразом. Операції присвоювання виконуються справа наліво, що дозволяє записати вираз, який складається з декількох присвоєнь (рядок 5 і 7).

 

1 #include <iostream>

2 using namespace std;

3 int main(){

4 int a, b, c;

5 a = b = c = 123;

6 cout << a << endl; // 123

7 a = b = c + 321;

8 cout << a << endl; // 444

9 }

 

Бінарні присвоєння стоять у кінці списку пріоритетів, тому іноді підвираз присвоювання слід охоплювати дужками:

 

#include <iostream>

using namespace std;

int main(){

int a, b = 1, c = 2;

bool r;

r = a = b + c < 2; // 0, a = 3 < 0, a = 0

cout << a << endl;

r = (a = b + c) < 2; // 3

cout << a << endl;

}

 

Комбіновані присвоєння є окремим випадком звичайних присвоювань. Вираз

 

операнд1 операція= операнд2;

 

є скороченим записом операції присвоєння:

 

операнд1 = операнд1 операція операнд2;

 

Операція виключне АБО має таку особливість: (a ^ b) ^ b = a. Тобто, якщо виконати операцію 2 рази з однаковим другим операндом, ми отримаємо значення першого операнда. Це дозволяє виконувати обмін двох цілочислових змінних значеннями.

 

#include <iostream>

using namespace std;

int main(){

int a = 123, b = 321;

a ^= b ^= a ^= b;

cout << "a = " << a << endl; // 321

cout << "b = " << b << endl; // 123

}

 

В програмах на С++ широко застосовують унарні операції присвоєння ++ і --. Перша з них називається інкрементом, вона збільшує значення операнда на одиницю. Друга – декрементом, зменшує значення операнда на одиницю. Можна застосовувати дві форми запису операцій інкремента і декремента: префіксну, коли знак ++/-- записується перед операндом, і постфіксну – коли знак операції вказується після операнда.

Якщо унарне присвоєння використовується як окремий оператор, то обидві форми запису – префіксна і постфіксна – рівнозначні. В наступному прикладі наведені чотири альтернативні способи збільшення і зменшення значення змінної на одиницю.

 

#include <iostream>

using namespace std;

int main(){

int a = 0, b = 0;

a++; ++a; a += 1; a = a + 1; // Збільшення на 1

b--; --b; b -= 1; b = b - 1; // Зменшення на 1

cout << "a = " << a << endl;

cout << "b = " << b << endl;

}

 

Різниця між постфіксною і префіксною формами запису проявляється, коли операції інкремента і декремента входять до складу іншого виразу. Префіксний інкремент (декремент) встановлює, що спочатку значення змінної збільшується (зменшується) на одиницю, і після цього нове значення змінної вступає в іншу операцію. Якщо використовується постфіксна форма, то спочатку значення змінної використовується у виразі, потім збільшується (зменшується) на одиниці.

 

#include <iostream>

using namespace std;

int main(){

int a = 3, b = 3, ta, tb;

ta = ++a + 1;

tb = b++ + 1;

cout << "ta = " << ta << endl; // 5

cout << "tb = " << tb << endl; // 4

}

 


<== попередня лекція | наступна лекція ==>
Логічні операції | Умовна операція


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн