Контакти

Що більше з або c. Оператори відносини і логічні оператори. Операції для цілочисельних обчислень

Так як в попередній статті, я вперше використав логічну операцію, розповім, які вони бувають, скільки їх і як ними користуватися.

В С ++ існує три логічні операції:

  1. Логічна операція І &&, нам вже відома;
  2. Логічна операція АБО || ;
  3. Логічна операція НЕ ! або логічне заперечення.

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

Зараз слід зрозуміти різницю між логічною операцією І та логічною операцією АБО, щоб в подальшому не плутатися. Прийшов час познайомитися з типом даних bool логічний. даний тип даних може приймати два значення: true (істина) і false (брехня). Проверяемое умова в операторах вибору має тип даних bool. Розглянемо принцип роботи наступної програми, і все буде зрозуміло з усіма цими логічними операціями.

// or_and_not.cpp: визначає точку входу для консольного застосування. #include "stdafx.h" #include using namespace std; int main (int argc, char * argv) (bool a1 \u003d true, a2 \u003d false; // оголошення логічних змінних bool a3 \u003d true, a4 \u003d false; cout<< "Tablica istinnosti log operacii &&" << endl; cout << "true && false: " << (a1 && a2) << endl // логическое И << "false && true: " << (a2 && a1) << endl << "true && true: " << (a1 && a3) << endl << "false && false: " << (a2 && a4) << endl; cout << "Tablica istinnosti log operacii ||" << endl; cout << "true || false: " << (a1 || a2) << endl // логическое ИЛИ << "false || true: " << (a2 || a1) << endl << "true || true: " << (a1 || a3) << endl << "false || false: " << (a2 || a4) << endl; cout << "Tablica istinnosti log operacii !" << endl; cout << "!true: " << (! a1) << endl // логическое НЕ << "!false: "<< (! a2) << endl; system("pause"); return 0; }

Рядки 9 і 10 вам повинні бути зрозумілі, так як тут не започатковано змінні типу bool . Причому кожної змінної присвоюється значення true або false. Починаючи з 9-го рядка і закінчуючи 20-й, Показано використання логічних операцій. Результат роботи програми (див. Малюнок 1).

Tablica istinnosti log operacii && true && false: 0 false && true: 0 true && true: 1 false && false: 0 Tablica istinnosti log operacii || true || false: 1 false || true: 1 true || true: 1 false || false: 0 Tablica istinnosti log operacii! ! True: 0! False: 1 Для продовження натисніть будь-яку клавішу. . .

Малюнок 1 - Логічні операції С ++

Напевно, у вас виникає питання, «А що це за нулики і одинички?». Якщо є питання, то на нього потрібно відповісти. Відповідаю: «Нулик-це уявлення логічного значення false (брехня), ну а одинички - це логічне true (істина)». Коротко поясню деякі моменти. Складений умова з використанням логічного І істинно тільки в тому випадку, коли істинні обидва простих умови. У всіх інших випадках складене умова помилкова. Складений умова з використанням логічного АБО помилково тільки в тому випадку, коли помилкові обидва простих умови. У всіх інших випадках складене умова істинно. логічне заперечення НЕ є унарною операцією, і вона не комбінує дві умови, на відміну від логічних операцій І і АБО, Які є бінарними операціями. Логічне заперечення дозволяє перевернути сенс умови, що в деяких випадках дуже зручно. Умова з логічним запереченням істинно в тому випадку, якщо це ж умова помилкова без заперечення, і навпаки.

У тексті на будь-якому природному мовою можна виділити чотири основні елементи: символи, слова, словосполучення і пропозиції. Алгоритмічна мова також містить такі елементи, тільки слова називають лексемами (елементарними конструкціями), словосполучення - виразами, пропозиції - операторами. Лексеми утворюються із символів, вирази з лексем і символів, оператори з символів виразів і лексем (Рис. 1.1)

Мал. 1.1. Склад алгоритмічної мови

Таким чином, елементами алгоритмічного мови є:

1) Алфавіт мови СІ ++, який включає

- великі та малі латинські букви і знак підкреслення;

- арабські цифри від 0 до 9;

- спеціальні знаки "(), | () + - /% *. \\ ':; &?<>=!#^

- пробільні символи (пробіл, табуляція, символи переходу на новий рядок).

2) З символів формуються лексеми мови:

ідентифікатори - імена об'єктів СІ-програм. В ідентифікатор можуть бути використані латинські букви, цифри і знак підкреслення. Великі та малі літери розрізняються, наприклад, PROG1, prog1 і Prog1 - три різних ідентифікатора. Першим символом повинна бути буква або знак підкреслення (але не цифра). Прогалини в ідентифікаторах не допускаються.

Ключові (Зарезервовані) слова - це слова, які мають спеціальне значення для компілятора. Їх не можна використовувати в якості ідентифікаторів.

- Знаки операцій - це один або кілька символів, що визначають дію над операндами. Операції поділяються на унарні, бінарні і тернарного за кількістю що беруть участь в цій операції операндів.

константи- це незмінні величини. Існують цілі, речові, символьні і рядкові константи. Компілятор виділяє константу в якості лексеми (елементарної конструкції) і відносить її до одного з типів по її зовнішньому вигляду.

роздільники - дужки, крапка, кома пробільні символи.

Константи в Сі ++

Константа - це лексема, що представляє зображення фіксованого числового, строкового або символьного значення.

Константи поділяються на 5 груп:

- речові (з плаваючою точкою);

- Рахункова;

- символьні;

- строкові.

Компілятор виділяє лексему і відносить її до тієї чи іншої групи, а потім всередині групи до певного типу по її формі записи в тексті програми і по числовому значенню.

Цілі константи можуть бути десятковими, вісімковими і шестнадцатерічнимі. Десяткова константа визначається як послідовність десяткових цифр, що починається ні з 0, якщо це число не 0 (приклади: 8, 0, 192 345). Вісімкова константа - це константа, яка завжди починається з 0. За 0 слідують восьмеричні цифри (приклади: 016 - десяткове значення 14, 01). Шістнадцятиричні константи - послідовність шістнадцятирічних цифр, яким передують символи 0х або 0Х (приклади: 0хА, 0Х00F).

Залежно від значення цілої константи компілятор по-різному представить її в пам'яті комп'ютера (т. Е. Компілятор припише константі відповідний тип даних).

Дійсні константи мають іншу форму внутрішнього представлення в пам'яті комп'ютера. Компілятор розпізнає такі константи з їхнього вигляду. Дійсні константи можуть мати дві форми подання: з фіксованою точкою і з плаваючою крапкою. Вид константи з фіксованою точкою: [цифри]. [Цифри] (приклади: 5.7, .0001, 41.). Вид константи з плаваючою точкою: [цифри] [.] [Цифри] E | e [+ | -] [цифри ] (приклади: 0.5е5, .11е-5, \u200b\u200b5Е3). У записі речових констант може опускатися або ціла, або подрібнена частини, або десяткова точка, або ознака експоненти з показником ступеня.

Рахункова константи вводяться за допомогою ключового слова enum. Це звичайні цілі константи, яким приписані унікальні і зручні для використання позначення. Приклади: enum (one \u003d 1, two \u003d 2, three \u003d 3, four \u003d 4);

enum (zero, one, two, three) - якщо у визначенні перелічуваних констант опустити знаки \u003d і числові значення, то значення будуть підписуватися за замовчуванням. При цьому самий лівий ідентифікатор отримає значення 0, а кожний наступний буде збільшуватися на 1.

enum (ten \u003d 10, three \u003d 3, four, five, six);

enum (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);

Символьні константи - це один або два символи, укладені в апострофи. Символьні константи, що складаються з одного символу, мають тип char і займають в пам'яті один байт, символьні константи, що складаються з двох символів, мають тип int і займають два байти. Послідовності, що починаються зі знака \\, називаються керуючими, вони використовуються:

- Для представлення символів, які не мають графічного відображення, наприклад:

\\ A - звуковий сигнал,

\\ B - повернення на один крок,

\\ N - новий рядок,

\\ T - горизонтальна табуляція.

- Для представлення символів: \\, ',? , "(\\\\, \\ ', \\? \\").

- Для представлення символів за допомогою шістнадцятирічних або вісімкових кодів (\\ 073, \\ 0хF5).

Строкова константа - це послідовність символів, укладена в лапки. Усередині рядків також можуть використовуватися керуючі символи. Наприклад: "\\ nНовая рядок",

"\\ N \\" Алгоритмічні мови програмування високого рівня \\ "".

Типи даних в С ++

Дані відображають в програмі навколишній світ. Мета програми полягає в обробці даних. Дані різних типів зберігаються і обробляються по-різному. Тип даних визначає:

1) внутрішнє представлення даних в пам'яті комп'ютера;

2) безліч значень, які можуть приймати величини цього типу;

3) операції та функції, які можна застосовувати до даних цього типу.

Залежно від вимог завдання програміст вибирає тип для об'єктів програми. Типи Сі ++ можна розділити на прості і складові. До простих типів відносять типи, які характеризуються одним значенням. У Сі ++ визначено 6 простих типів даних:

Існує 4 специфікатор типу, уточнюючих внутрішнє уявлення і діапазон стандартних типів

short (короткий)

long (довгий)

signed (знаковий)

unsigned (беззнаковий)

Типint

Значеннями цього типу є цілі числа.

Розмір типу int не визначається стандартом, а залежить від комп'ютера і компілятора. Для 16-розрядного процесора під нього відводиться 2 байти, для 32-розрядної - 4 байта.

Якщо перед int стоїть специфікатор short, то під число відводиться 2 байти, а якщо специфікатор long, то 4 байта. Від кількості відводиться під об'єкт пам'яті залежить безліч допустимих значень, які може приймати об'єкт:

short int - займає 2 байта, отже, має діапазон -32768 .. + 32767;

long int - займає 4 байта, отже, має діапазон -2 147 483 648 .. +2 147 483 647

Тип int збігається з типом short int на 16-розрядних ПК і з типом long int на 32-розрядних ПК.

Модифікатори signed і unsigned також впливають на безліч допустимих значень, які може приймати об'єкт:

unsigned short int - займає 2 байта, отже, має діапазон 0 ..65536;

unsigned long int - займає 4 байта, отже, має діапазон 0 .. + 4 294 967 295.

Типchar

Значеннями цього типу є елементи кінцевого впорядкованої множини символів. Кожному символу ставиться у відповідність число, яке називається кодом символу. Під величину символьного типу відводиться 1 байт. Тип char може використовуватися зі специфікаторами signed і unsigned. В даних типу signed char можна зберігати значення в діапазоні від -128 до 127. При використанні типу unsigned char значення можуть знаходитися в діапазоні від 0 до 255. Для кодування використовується код ASCII (American Standard Code foe International Interchange). Символи з кодами від 0 до 31 відносяться до службових і мають самостійне значення тільки в операторах вводу-виводу.

Величини типу char також застосовуються для зберігання чисел з зазначених діапазонів.

Типwchar_t

Призначений для роботи з набором символів, для кодування яких недостатньо 1 байта, наприклад Unicode. Розмір цього типу, як правило, відповідає типу short. Строкові константи такого типу записуються з префіксом L: L "String # 1".

Типbool

Тип bool називається логічним. Його величини можуть приймати значення true і false. Внутрішня форма подання false - 0, будь-яке інше значення інтерпретується як true.

Типи з плаваючою точкою.

Внутрішнє представлення дійсного числа складається з 2 частин: мантиси і порядку. У IBM-сумісних ПК величини типу float займають 4 байта, з яких один розряд відводиться під знак мантиси, 8 розрядів під порядок і 24 - під мантиссу.

Величини типи double займають 8 байтів, під порядок і мантиссу відводяться 11 і 52 розряду відповідно. Довжина мантиси визначає точність числа, а довжина близько його діапазон.

Якщо перед ім'ям типу double стоїть специфікатор long, то під величину відводиться байтів.

Типvoid

До основних типів також відноситься тип void Безліч значень цього типу - порожньо.

змінні

Змінна в СІ ++ - іменована область пам'яті, в якій зберігаються дані певного типу. У змінної є ім'я і значення. Ім'я служить для звернення до області пам'яті, в якій зберігається значення. Перед використанням будь-яка змінна повинна бути описана. приклади:

Загальний вигляд оператора опису:

[Клас пам'яті] тип ім'я [ініціалізатор];

Клас пам'яті може приймати значення: auto, extern, static, register. Клас пам'яті визначає час життя і область видимості змінної. Якщо клас пам'яті не вказано явно, то компілятор визначає його виходячи з контексту оголошення. Час життя може бути постійним - протягом виконання програми або тимчасовим - протягом блоку. Область видимості - частина тексту програми, з якої допустимо звичайний доступ до змінної. Зазвичай область видимості збігається з областю дії. Крім того випадку, коли у внутрішньому блоці існує змінна з таким же ім'ям.

Const - показує, що цю змінну не можна змінювати (іменована константа).

При описі можна привласнити змінної початкове значення (ініціалізація).

Класи пам'яті:

auto-автоматична локальна змінна. Специфікатор auto може бути заданий тільки при визначенні об'єктів блоку, наприклад, в тілі функції. Цим змінним пам'ять виділяється при вході в блок і звільняється при виході з нього. Поза блоку такі змінні не існують.

extern - глобальна змінна, вона знаходиться в іншому місці програми (в іншому файлі або довше за текстом). Використовується для створення змінних, які доступні у всіх файлах програми.

static - статична змінна, вона існує тільки в межах того файлу, де визначена змінна.

register - аналогічні auto, але пам'ять під них виділяється в регістрах процесора. Якщо такої можливості немає, то змінні обробляються як auto.

Int a; // глобальна змінна void main () (int b; // локальна змінна extern int x; // змінна х визначена в іншому місці static int c; // локальна статична змінна a \u003d 1; // присвоювання глобальної змінної int a; / / локальна змінна а a \u003d 2; // присвоювання локальної змінної :: a \u003d 3; // присвоювання глобальної змінної) int x \u003d 4; // визначення та ініціалізація х

У прикладі змінна а визначена поза всіма блоків. Областю дії змінної а є вся програма, крім тих рядків, де використовується локальна змінна а. Змінні b і з - локальні, область їх видимості - блок. Час життя по-різному: пам'ять під b виділяється при вході в блок (т. К. За замовчуванням клас пам'яті auto), звільняється при виході з нього. Змінна з (static) існує, поки працює програма.

Якщо при визначенні початкове значення змінним не ставить явно, то компілятор обнуляє глобальні і статичні змінні. Автоматичні змінні не инициализируются ..

Ім'я змінної має бути унікальним в своїй області дії.

Опис змінної може бути виконано або як оголошення, або як визначення. Оголошення містить інформацію про клас пам'яті і типі змінної, визначення разом з цією інформацією дає вказівку виділити пам'ять. У прикладі extern int x; - оголошення, а решта - визначення.

Знаки операцій в Сі ++

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

унарні операції

& отримання адреси операнда
* Звернення за адресою (розіменування)
унарний мінус, змінює знак арифметичного операнда
~ поразрядное інвертування внутрішнього двійкового коду цілочисельного операнда (побітовое заперечення)
! логічне заперечення (НЕ). Як логічних значень використовується 0 - брехня і не 0 - істина, запереченням 0 буде 1, запереченням будь-якого ненульового числа буде 0.
++ Збільшення на одиницю:

префиксная операція - збільшує операнд до його використання,

постфіксний операція збільшує операнд після його використання.

int a \u003d (m ++) + n; // a \u003d 4, m \u003d 2, n \u003d 2

int b \u003d m + (++ n); // a \u003d 3, m \u003d 1, n \u003d 3

— — зменшення на одиницю:

префиксная операція - зменшує операнд до його використання,

постфіксний операція зменшує операнд після його використання.

sizeof обчислення розміру (в байтах) для об'єкта того типу, який має операнд

має дві форми

sizeof вираз

sizeof (float) // 4

sizeof (1.0) // 8, т. к. речові константи за замовчуванням мають тип double

Бінарні операції.

адитивні:

мультиплікативні:

Операції зсуву (визначені тільки для цілочисельних операндів).

Формат виразу з операцією зсуву:

операнд_левий операція_сдвіга операнд_правий

Порозрядні операції:

Операції порівняння: результатом є true (НЕ 0) або false (0)

Логічні бінарні операції:

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

І т.д.

Формат операції простого присвоювання:

операнд1 \u003d операнд2

Леводопустімое значення (L-значення) - вираз, яке адресує деяка ділянка пам'яті, т. Е. В нього можна занести значення. Ця назва походить від операції присвоювання, т. К. Саме ліва частина операції присвоювання визначає, в яку область пам'яті буде занесений результат операції. Змінна - це окремий випадок леводопустімого вираження.

Умовна операція.

На відміну від унарних і бінарних операцій в ній використовується три операнда.

Вираз1? Вираженіе2: вираз3;

Першим обчислюється значення вираженія1. Якщо воно істинне, то обчислюється значення вираженія2, яке стає результатом. Якщо при обчисленні вираженія1 вийде 0, то в якості результату береться значення вираженія3.

наприклад:

x<0 ? -x: x ; //вычисляется абсолютное значение x.

Операція явного (перетворення) приведення типу.

Існує дві форми: канонічна і функціональна:

1) (імя_тіпа) операнд

2) імя_тіпа (операнд)

(Int) a // канонічна форма

int (a) // функціональна форма

вирази

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

Пріоритети операцій у виразах

Ранг операції
1 () -> .
2 ! ~ - ++ - & * (тип) sizeof тип ()
3 * /% (Мультиплікативні бінарні)
+ - (адитивні бінарні)
5 << >\u003e (Поразрядного зсуву)
6 < > <= >\u003d (Відносини)
7 \u003d\u003d! \u003d (Відносини)
8 & (Поразрядное кон'юнкція «І»)
9 ^ (Порозрядне виключає «АБО»)
10 | (Поразрядное диз'юнкція «АБО»)
11 && (кон'юнкція «І»)
12 || (Диз'юнкція «АБО»)
13 ?: (Умовна операція)
14 = *= /= %= -= &= ^= |= <<= >\u003e \u003d (Операція присвоювання)
15 , (Операція кома)

Останнє оновлення: 19.06.2017

Окремий набір операцій представляє умовні вирази. Такі операції повертають логічне значення, тобто значення типу bool: true, якщо вираз істинний, і false, якщо вираз помилково. До подібних операцій належать операції порівняння і логічні операції.

операції порівняння

В операціях порівняння порівнюються два операнда і повертається значення типу bool - true, якщо вираз вірний, і false, якщо вираз невірно.

    Порівнює два операнда на рівність. Якщо вони рівні, то операція повертає true, якщо не рівні, то повертається false:

    B; // false

    Порівнює два операнда і повертає true, якщо операнди не рівні, і false, якщо вони рівні.

    Int a \u003d 10; int b \u003d 4; bool c \u003d a! \u003d b; // true bool d \u003d a! \u003d 10; // false

    Операція "менше ніж". Повертає true, якщо перший операнд менше другого, і false, якщо перший операнд більше другого:

    Int a \u003d 10; int b \u003d 4; bool c \u003d a< b; // false

    Операція "більше ніж". Порівнює два операнда і повертає true, якщо перший операнд більше другого, інакше повертає false:

    Int a \u003d 10; int b \u003d 4; bool c \u003d a\u003e b; // true bool d \u003d a\u003e 25; // false

    Операція "менше або дорівнює". Порівнює два операнда і повертає true, якщо перший операнд менше або дорівнює другому. Інакше повертає false.

    Int a \u003d 10; int b \u003d 4; bool c \u003d a<= b; // false bool d = a <= 25; // true

    Операція "більше або дорівнює". Порівнює два операнда і повертає true, якщо перший операнд більше або дорівнює другому, інакше повертається false:

    Int a \u003d 10; int b \u003d 4; bool c \u003d a\u003e \u003d b; // true bool d \u003d a\u003e \u003d 25; // false

операції<, > <=, >\u003d Мають більший пріоритет, ніж \u003d\u003d і! \u003d.

Логічні операції

Також в C # визначено логічні оператори, які також повертають значення типу bool. Як операнди вони приймають значення типу bool. Як правило, застосовуються до відносин і об'єднують кілька операцій порівняння.

    Операція логічного додавання або логічне АБО. Повертає true, якщо хоча б один з операндів повертає true.

    Bool x1 \u003d (5\u003e 6) | (4< 6); // 5 > 6 - false, 4< 6 - true, поэтому возвращается true bool x2 = (5 > 6) | (4\u003e 6); // 5\u003e 6 - false, 4\u003e

    Операція логічного множення або логічне І. Повертає true, якщо обидва операнда одночасно рівні true.

    Bool x1 \u003d (5\u003e 6) & (4< 6); // 5 > 6 - false, 4< 6 - true, поэтому возвращается false bool x2 = (5 < 6) & (4 < 6); // 5 < 6 - true, 4 < 6 - true, поэтому возвращается true

    Операція логічного складання. Повертає true, якщо хоча б один з операндів повертає true.

    Bool x1 \u003d (5\u003e 6) || (4< 6); // 5 > 6 - false, 4< 6 - true, поэтому возвращается true bool x2 = (5 > 6) || (4\u003e 6); // 5\u003e 6 - false, 4\u003e 6 \u200b\u200b- false, тому повертається false

    Операція логічного множення. Повертає true, якщо обидва операнда одночасно рівні true.

    Bool x1 \u003d (5\u003e 6) && (4< 6); // 5 > 6 - false, 4< 6 - true, поэтому возвращается false bool x2 = (5 < 6) && (4 < 6); // 5 < 6 - true, 4 < 6 - true, поэтому возвращается true

    Операція логічного заперечення. Проводиться над одним операндом і повертає true, якщо операнд дорівнює false. Якщо операнд дорівнює true, то операція повертає false:

    Bool a \u003d true; bool b \u003d! a; // false

    Операція виключає АБО. Повертає true, якщо або перший, або другий операнд (але не одночасно) рівні true, інакше повертає false

    Bool x5 \u003d (5\u003e 6) ^ (4< 6); // 5 > 6 - false, 4< 6 - true, поэтому возвращается true bool x6 = (50 > 6) ^ (4 / 2 < 3); // 50 > 6 - true, 4/2< 3 - true, поэтому возвращается false

Тут у нас дві пари операцій | і || (А також & і &&) виконують схожі дії, проте ж вони не рівнозначні.

У вираженні z \u003d x | y; будуть обчислюватися обидва значення - x і y.

У вираженні ж z \u003d x || y; спочатку буде обчислюватися значення x, і якщо воно дорівнює true, то обчислення значення y вже сенсу не має, так як у нас в будь-якому випадку вже z дорівнюватиме true. Значення y буде обчислюватися тільки в тому випадку, якщо x одно false

Те ж саме стосується пари операцій & / &&. У вираженні z \u003d x будуть обчислюватися обидва значення - x і y.

У вираженні ж z \u003d x & спочатку буде обчислюватися значення x, і якщо воно дорівнює false, то обчислення значення y вже сенсу не має, так як у нас в будь-якому випадку вже z дорівнюватиме false. Значення y буде обчислюватися тільки в тому випадку, якщо x одно true

Тому операції || і && більш зручні в обчисленнях, так як дозволяють скоротити час на обчислення значення виразу, і тим самим підвищують продуктивність. А операції | і & більше підходять для виконання порозрядних операцій над числами.

Оператори відносини і логічні оператори

У позначеннях оператор відносини і логічний оператор термін відносини означає взаємозв'язок, яка може існувати між двома значеннями, а термін логічний - взаємозв'язок між логічними значеннями "істина" і "брехня". І оскільки оператори відносини дають правдиві чи неправдиві результати, то вони нерідко застосовуються разом з логічними операторами. Саме з цієї причини вони і розглядаються спільно.

Нижче перераховані оператори відносини:

До числа логічних відносяться оператори, наведені нижче:

Результатом виконання оператора відносини або логічного оператора є логічне значення типу bool.

В цілому, об'єкти можна порівнювати на рівність чи нерівність, використовуючи оператори відносини \u003d\u003d і! \u003d. А оператори порівняння, \u003d можуть застосовуватися тільки до тих типів даних, які підтримують відношення порядку. Отже, оператори відносини можна застосовувати до всіх числовим типами даних. Але значення типу bool можуть порівнюватися тільки на рівність чи нерівність, оскільки справжні (true) і помилкові (false) значення не упорядковуються. Наприклад, порівняння true\u003e false в C # не має сенсу.

Розглянемо приклад програми, що демонструє застосування операторів відносини і логічних операторів:

Using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 (class Program (static void Main (string args) (short d \u003d 10, f \u003d 12; bool var1 \u003d true, var2 \u003d false; if (df) Console.WriteLine ( "d\u003e f"); // порівнювання змінні var1 і var2 if (var1 & var2) Console.WriteLine ( "Даний текст не виведеться"); if (! (var1 & var2)) Console.WriteLine ( "! (var1 & var2) \u003d true"); if (var1 | var2) Console.WriteLine ( "var1 | var2 \u003d true"); if (var1 ^ var2) Console.WriteLine ( "var1 ^ var2 \u003d true"); Console.ReadLine ();)))

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

Операція імплікації може бути побудована на основі комбінації логічних операторів! і |:

Укорочені логічні оператори

У C # передбачені також спеціальні, укорочені, Варіанти логічних операторів І і АБО, призначені для отримання більш ефективного коду. Пояснимо це на наступних прикладах логічних операцій. Якщо перший операнд логічної операції І має помилкове значення (false), то її результат буде мати помилкове значення незалежно від значення другого операнда. Якщо ж перший операнд логічної операції АБО має справжнє значення (true), то її результат буде мати справжнє значення незалежно від значення другого операнда. Завдяки тому що значення другого операнда в цих операціях обчислювати не потрібно, економиться час і підвищується ефективність коду.

Укорочена логічна операція І виконується за допомогою оператора &&, А укорочена логічна операція АБО - за допомогою оператора ||. Цим укороченим логічним операторам відповідають звичайні логічні оператори & і |. Єдина відмінність укороченого логічного оператора від звичайного полягає в тому, що другий його операнд обчислюється тільки в міру необхідності.

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

Операції виконуються в строгій послідовності. Величина, що визначає переважне право на виконання тієї чи іншої операції, називається пріоритетом. У табл. 2 перераховані різні операції мови СІ (C). Їх пріоритети для кожної групи однакові (групи виділене). Чим більшою перевагою користується відповідна група операцій, тим вище вона розташована в таблиці. Порядок виконання операцій може регулюватися за допомогою круглих дужок.

Таблиця 2 - операції

знак операції

призначення операції

Виклик функції

Виділення елемента масиву

Виділення елемента запису

Виділення елемента запису

логічне заперечення

порозрядне заперечення

зміна знака

Збільшення на одиницю

Зменшення на одиницю

взяття адреси

Звернення за адресою

Перетворення типу (тобто (float) a)

Визначення розміру в байтах

множення

Визначення залишку від ділення

додавання

віднімання

зрушення вліво

зрушення вправо

Менше ніж

Менше або дорівнює

Більше ніж

Більше чи рівно

Порозрядне логічне "І"

Порозрядне виключає "АБО"

Порозрядне логічне "АБО"

Логічне "І"

Логічне "АБО"

Умовна (тернарного) операція

Присвоєння

+=, - =, *=, /=, %=, <<=,
>>=, &=, |=, ^=

Бінарні операції (наприклад, а * \u003d b
(Тобто a \u003d a * b) і т.д.)

операція кома

Оператор в мові Сі (C)

Для виключення плутанини в поняттях "операція" та "оператор", відзначимо, що оператор - це найменша виконується одиниця програми. Розрізняють оператори вираження, дія яких полягає в обчисленні заданих виразів (наприклад: a \u003d sin (b) + c; j ++;), оператори оголошення, складові оператори, порожні оператори, оператори мітки, циклу і т.д. Для позначення кінця оператора в мові СІ (C) крапку з комою. Що стосується складеного оператора (або блоку), що представляє собою набір логічно пов'язаних операторів, поміщених між відкриває (() і закриває ()) фігурними дужками ( "операторними дужками"), то за ним крапка з комою не ставиться. Відзначимо, що блок відрізняється від складеного оператора наявністю визначень в тілі блоку.

Характеристика основних операцій мови Сі (C)

Охарактеризуємо основні операції мови СІ (C).

операція присвоювання

Спочатку розглянемо одну з них - операцію присвоювання (\u003d). вираз виду

привласнює змінної х значення змінної у. Операцію "\u003d" дозволяється використовувати багаторазово в одному вираженні, наприклад:

x \u003d y \u003d z \u003d 100;

Розрізняють унарні і бінарні операції. У перших з них один операнд, а у других - два. Почнемо їх розгляд з операцій, віднесених до першої з наступних традиційних груп:

Арифметичні операції.

Логічні операції та операції відносини.

Операції з бітами.

Арифметичні операції задаються наступними символами (табл. 2): +, -, *, /,%. Останню з них не можна застосовувати до змінних дійсного типу. наприклад:

a \u003d b + c;
x \u003d y - z;
r \u003d t * v;
s \u003d k / l;
p \u003d q% w;

Логічні операції

Логічні операції відносини задаються наступними символами (див. Табл. 2): && ( "І"), || ( "АБО"),! ( "НЕ"),\u003e,\u003e \u003d,<, <= , = = (равно), != (не равно). Традиционно эти операции должны давать одно из двух значений: истину или ложь. В языке СИ (C)принято следующее правило: истина - это любое ненулевое значение; ложь - это нулевое значение. Выражения, использующие логические операции и операции отношения, возвращают 0 для ложного значения и 1 для истинного. Ниже приводится таблица истинности для логических операций.

Бітові операції можна застосовувати до змінних, які мають типи int, char, а також їх варіантів (наприклад, long int). Їх не можна застосовувати до змінних типів float, double, void (або більш складних типів). Ці операції задаються наступними символами: ~ (поразрядное заперечення),<< (сдвиг влево), >\u003e (Зрушення вправо), & (поразрядное "І"), ^ (порозрядне виключає "АБО"), | (Поразрядное "АБО").

Приклади: якщо a \u003d 0000 1111 і b \u003d 1000 1000, то

~ A \u003d 1111 0000,
a<< 1 = 0001 1110,
a \u003e\u003e 1 \u003d 0000 0111,
a & b \u003d 0000 1000,
a ^ b \u003d 1000 0111,
a | b \u003d 1000 1111.

У мові передбачені дві нетрадиційні операції інкремента (++) і декремента (-). Вони призначені для збільшення і зменшення на одиницю значення операнда. Операції ++ і - можна записувати як перед операндом, так і після нього. У першому випадку (++ n або --n) значення операнда (n) змінюється перед його використанням у відповідному вираженні, а в другому (n ++ або n--) - після його використання. Розглянемо дві наступні рядки програми:

a \u003d b + c ++;
a1 \u003d b1 + ++ c1;

Припустимо, що b \u003d b1 \u003d 2, c \u003d c1 \u003d 4. Тоді після виконання операцій: a \u003d 6, b \u003d 2, c \u003d 5, a1 \u003d 7, b1 \u003d 2, c1 \u003d 5.

Широке поширення знаходять також вирази з ще однією нетрадиційної тернарной або умовної операцією ?:. У формулі

y \u003d a, якщо x не дорівнює нулю (тобто істинно), і y \u003d b, якщо х дорівнює нулю (помилково). наступне вираз

y \u003d (a\u003e b)? a: b;

дозволяє привласнити змінної у значення більшої змінної (а чи b), тобто y \u003d max (a, b).

Ще однією відмінністю мови є те, що вираз виду а \u003d а + 5; можна записати в іншій формі: a + \u003d 5 ;. Замість знака + можна використовувати і символи інших бінарних операцій (див. Табл. 2).

Інші операції з табл. 2 будуть описані в наступних параграфах.

Цикли організовуються, щоб виконати певний оператор або групу операторів певне число раз. У мові СІ (C) три оператора циклу: for, while і do - while. Перший з них формально записується, в наступному вигляді:

for (вираз_1; вираженіе_2; вираженіе_3) тіло_цикла

Тіло циклу становить або один оператор, або кілька операторів, укладених у фігурні дужки (...) (після блоку крапка з комою не ставиться). У виразах 1, 2, 3 фігурує спеціальна змінна, звана керуючої. За її значенням встановлюється необхідність повторення циклу або виходу з нього.

Вираз_1 привласнює початкове значення керуючої змінної, вираженіе_З змінює його на кожному кроці, а вираженіе_2 перевіряє, чи не досягло воно граничного значення, що встановлює необхідність виходу з циклу.

for (i \u003d 1; i< 10; i++)

for (СH \u003d "a"; ch! \u003d "p";) scanf ( "% c", & ch);

/ * Цикл буде виконуватися до тих пір, поки з клавіатури

не буде введений символ "p" * /

Будь-яке з трьох виразів в циклі for може бути відсутнім, проте крапка з комою повинна залишатися. Таким чином, for (;;) (...) - це нескінченний цикл, з якого можна вийти лише іншими способами.

У мові СІ (C) прийнято наступне правило. Будь-яке вираження з операцією привласнення, укладену в круглі дужки, має значення, рівне що присвоюються. Наприклад, вираз (а \u003d 7 + 2) має значення 9. Після цього можна записати інший вираз, наприклад: ((а \u003d 7 + 2)<10), которое в данном случае будет всегда давать истинное значение. Следующая конструкция:

((СH \u003d getch ()) \u003d\u003d "i")

дозволяє вводити значення змінної СH і давати істинний результат тільки тоді, коли введеним значенням є буква "i". У дужках можна записувати і кілька формул, що становлять складне вираз. Для цих цілей використовується операція кома. Формули будуть обчислюватися зліва направо, і все вираз прийме значення останньої обчисленої формули. Наприклад, якщо є дві змінні типу char, то вираз

z \u003d (х \u003d у, у \u003d getch ());

визначає наступні дії: значення змінної у присвоюється змінної х; вводиться символ з клавіатури і присвоюється змінної у; z отримує значення змінної у. Дужки тут потрібні, оскільки операція кома має більш низький пріоритет, ніж операція присвоювання, записана після змінної z. Операція кома знаходить широке застосування для побудови виразів циклу for і дозволяє паралельно змінювати значення декількох керуючих змінних.

Допускаються вкладені конструкції, тобто в тілі деякого циклу можуть зустрічатися інші оператори for.

Оператор while формально записується в такому вигляді:

while (вираз) тіло_цикла

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

Оператор do-while формально записується в такий спосіб:

do (тіло_цикла) while (вираз);

Основною відмінністю між циклами while і do - while є те, що тіло в циклі do - while виконується принаймні один раз. Тіло циклу буде виконуватися до тих пір, поки вираз в дужках не прийме помилкове значення. Якщо воно помилкове при вході в цикл, то його тіло виконується рівно один раз.

Допускається вкладеність одних циклів в інші, тобто в тілі будь-якого циклу можуть з'являтися оператори for, while і do - while.

У тілі циклу можуть використовуватися нові оператори break і continue. Оператор break забезпечує негайний вихід з циклу, оператор continue викликає припинення черговий і початок наступної ітерації.

Оператори умовних і безумовних переходів

Для організації умовних і безумовних переходів в програмі на мові СІ (C) використовуються оператори: if - else, switch і goto. Перший з них записується в такий спосіб:

if (проверка_условія) оператор_1; else оператор_2;

Якщо умова в дужках приймає істинне значення, виконується оператор_1, якщо хибне - оператор_2. Якщо замість одного необхідно виконати декілька операторів, то вони полягають у фігурні дужки. В операторі if слово else може бути відсутнім.

В операторі if - else безпосередньо після ключових слів if і else повинні слідувати інші оператори. Якщо хоча б один з них є оператором if, його називають вкладеним. Відповідно до прийнятого в мові СІ (C) угодою слово else завжди відноситься до найближчого попередньому йому if.

Оператор switch дозволяє вибрати одну з декількох альтернатив. Він записується в наступному формальному вигляді:

switch (вираз)

case константа_1: оператори_1;

case константа_2: оператори_2;

........ ........

default: оператори_default;

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

Для припинення подальших перевірок після успішного вибору деякого варіанту використовується оператор break, що забезпечує негайний вихід з перемикача switch.

Допускаються вкладені конструкції switch.

Розглянемо правила виконання безумовного переходу, який можна уявити в такій формі:

goto мітка;

Мітка - це будь-який ідентифікатор, після якого поставлено двокрапка. Оператор goto вказує, що виконання програми необхідно продовжити починаючи з оператора, перед яким записана мітка. Мітку можна поставити перед будь-яким оператором в тій функції, де знаходиться відповідний їй оператор goto. Її не треба оголошувати.

Турбо відладчик повністю підтримує синтаксис виразів мови СІ (C). Вираз складається з суміші операцій, рядків, змінних



Сподобалася стаття? поділіться їй