Операції порівняння здебільшого використовуються в умовних виразах. Приклади умовних виразів: b<0, 'b'=='B','f'!='F', 201>=205, Кожна умова перевіряється: істинна вона чи хибна. Точніше слід сказати, що кожна умова приймає значення "істинно" (true) або "хибно" (flase). В мові Сі немає логічного (булевого) типу. Тому результатом умовного виразу є цілочисельне арифметичне значення. "Істинно" - це ненульова величина, а "хибно" - це нуль. В більшості випадків в якості ненульового значення "істинно" використовується одиниця. Приклад: #include<stdio.h> main() { int tr, fal; tr=(111<=115); /* вираз істинний */ fal=(111>115); /* вираз хибний */ printf("true - %d false - %d \n",tr,fal); return 0; }
1.4.4 Логічні операції Логічні операції &&, ||,! використовуються здебільшого для "об'єднання" виразів порівняння у відповідності з правилами логічного І, логічного АБО та логічного заперечення (таблиця 1.8.).
Таблиця 1.8. Логічні операції
Операція
Значення
&&
логічне І (and)
| |
логічне АБО (or)
!
логічне заперечення (not)
Складні логічні вирази обчислюються "раціональним способом". Наприклад, якщо у виразі (A<=B)&&(B<=C) виявилось, що А більше В, то всі вирази, як і його перша частина (А<=B), приймають значення "хибно", тому друга частина (В<=C) не обчислюється. Результат логічної операції 1, якщо істина і 0 у протилежному випадку.
Таблиця 1.9. Таблиця істинності логічних операцій
E1
E2
E1&&E2
E1||E2
!E1
1.4.5 Порозрядні операції (побітові операції) Порозрядні операції застосовуються тільки до цілочисельних операндів і "працюють" з їх двійковими представленнями. Ці операції неможливо використовувати із змінними типу double, float, long double.
Таблиця 1.10. Порозрядні операції
Операція
Значення
~
порозрядне заперечення
&
побітова кон'юнкція (побітове І)
|
побітова диз'юнкція (побітове АБО)
^
побітове додавання за МОД2
<<
зсув вліво
>>
зсув вправо
Таблиця 1.11. Таблиця істинності логічних порозрядних операцій
E1
E2
E1&E2
E1^E2
E1|E2
• Порозрядне заперечення! заміняє змінює кожну 1 на 0, а 0 на 1. Приклад: ~ (10011010) == (01100101) • Порозрядна кон'юнкція & (порозрядне І) порівнює послідовно розряд за розрядом два операнди. Для кожного розряду результат рівний 1, якщо тільки два відповідних розряди операндів рівні 1, в інших випадках результат 0. • Приклад: (10010011) & (00111101) == (00010001) • Порозрядна диз'юнкція | (порозрядне АБО) порівнює послідовно розряд за розрядом два операнди. Для кожного розряду результат рівний 1, якщо хоча б один з відповідних розрядів рівний 1. Приклад: (10010011) | (00111101) == (10111111) • Побітове додавання за МОД2 порівнює послідовно розряд за розрядом два операнди. Для кожного розряду результат рівний 1, якщо один з двох (але не обидва) відповідних розряди рівні 1. Приклад: (10010011) ^ (00111101) == (10101110) На операції побітового додавання за МОД2 ґрунтується метод обміну значень двох цілочисельних змінних. a^=b^=a^=b; • Операція зсуву вліво (вправо) переміщує розряди першого операнду вліво (вправо) на число позицій, яке задане другим операндом. Позиції, що звільняються, заповнюються нулями, а розряди, що зсуваються за ліву (праву) границю, втрачаються. Приклади: (10001010) << 2 == (00101000) (10001010) >> 2 == (00100010)
1.4.6 Операція слідування (кома) Операція "кома" (,) називається операцією слідування, яка "зв'язує" два довільних вирази. Список виразів, розділених між собою комами, обчислюються зліва направо. Наприклад, фрагмент тексту a=4; b=a+5; можна записати так: a=4, b=b+5; Операція слідування використовується в основному в операторах циклу for() (про оператори циклів піде мова пізніше). Для порівняння наводимо приклад з використанням операції слідування (приклад 1) та без неї (приклад 2): Приклад 1. int a[10],sum,i; /*... */ sum=a[0]; for (i=1;i<10;i++) sum+=a[i]; Приклад 2. int a[10],sum,i; /*... */ for (i=1,sum=a[0];i<10;sum+=a[i],i++);
1.4.7 Умовна операція?: Умовна операція?: - єдина тернарна операція в мові Сі. Її синтаксис: умова? вираз_1: вираз_2 Принцип її роботи такий. Спочатку обчислюється вираз умови. Якщо цей вираз має ненульове значення, то обчислюється вираз_1. Результатом операції?: в даному випадку буде значення виразу_1. Якщо вираз умови рівний нулю, то обчислюється вираз_2 і його значення буде результатом операції. В будь-якому випадку обчислюється тільки один із виразів (вираз_1 або вираз_2). Наприклад, дану операцію зручно використати для знаходження найбільшого з двох чисел x і y: max=(x>y)?x:y; Приклад 1: #include<stdio.h> void main() { int points; printf("Введiть оцiнку [2..5]:"); scanf("%d",&points); printf("%s",points>3?"Ви добре знаєте матерiал!":"Погано..."); } Приклад 2: j = (i<0)? (-i): (i); /* змінній j присвоюється модуль i*/
1.4.8 Операція sizeof() Дана операція обчислює розмір пам'яті, необхідний для розміщення в ній виразів або змінних вказаних типів. Операція має дві форми: 1). ім'я_типу А; sizeof А; 2). sizeof (ім'я_типу); Операцію sizeof() можна застосовувати до констант, типів або змінних, у результаті чого буде отримано число байт, що відводяться під операнд. Приміром, sizеof(int) поверне число байт для розміщення змінної типу int.
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав!Последнее добавление