Логички изрази служе за поређење различитих података и за друге логичке операције. То су изрази састављени од логичких операнада повезаних логичким операторима. Логички операнди су релацијски изрази или логички изрази.
Логички оператори који се користе у језику C# су:
• оператор коњункције - && (and) који проверава да ли су оба израза тачна
• оператор дисјункције - || (or) који проверава да ли је макар један израз тачан
• оператор негације - ! (not) који има истиниту вредност само када је израз нетачан
Приоритет логичких оператора:
Логички оператори имају већи приоритет од релационих оператора (<, >, <=, >=, ==, !=). Највиши приоритет од логичких оператора има оператор !, затим && и на крају ||.
Дефинисање логичких израза
Логичке константе True и False су логички изрази
Логичке променљиве (типа Boolean) су логички изрази
Релацијски изрази су логички изрази
Позиви логичких функција су логички изрази
Ако су L1 и L2 логички изрази, тада су логички изрази и (L1 && L2), (L1 || L2), (!L1), (!L2)
Унарни логички оператор ! негира логичку вредност на коју се примењује. Израз ! L1 има вредност true уколико L1 има вредност false и обрнуто.
Слика 5.2. Таблица логичког оператора !
Израз облика L1 && L2 има вредност true само ако обе логичке вредности имају вредност true, у супротном, вредност израза је false.
Слика 5.3. Таблица логичког оператора &&
Израз облика L1 || L2 има вредност false само ако обе логичке вредности имају вредност false, у супротном, вредност израза је true.
Слика 5.4. Таблица логичког оператора ||
У израчунавању вредности логичких израза користи се лењо израчунавање. Његова основна карактеристика јесте израчунавање само оног што је неопходно.
Лењо израчунавање
У изразима у којима се јавља логички оператор &&, уколико је вредност првог операнда једнака false, онда се
не израчунава вредност другог операнда. Уколико је вредност првог операнда једнака true, онда се израчунава и вредност другог операнда.
У изразима у којима се јавља логички оператор ||, уколико је вредност првог операнда једнака true, онда се не израчунава вредност другог операнда.
Уколико је вредност првог операнда једнака false, онда се израчунава и вредност другог операнда.
На пример, приликом израчунавања вредности израза (2 < 1) && (x++ > 10), биће израчунато да је вредност подизраза (2 < 1) false, па је и вредност целог израза false
(због својства логичког &&). Зато нема потребе израчунавати вредност подизраза x++, па ће вредност променљиве x остати непромењена након израчунавања вредности наведеног израза.
С друге стране, након израчунавања вредности израза (1 < 2) && (x++ > 10), вредност променљиве x ће бити промењена (увећана за 1) јер подизраз (1 < 2) има вредност true, па је потребно израчунати и вредност другог операнда.
На пример, након израчунавања вредности израза
(1 < 2) || (x++ > 10), се не мења вредност променљиве x јер подизраз (1 < 2) има вредност true, па се вредност другог операнда не рачуна, a након
(2 < 1) || (x++ > 10), се мења (увећава за 1) вредност променљиве x јер је вредност подизраза (2 < 1) једнака false, па се израчунава и вредност другог операнда.
Пример 1. За x = 5, y = 2, одредити вредност следећих израза:
Како је 5 % 3 = 2, а 2 != 0, то је вредност подизраза (x % 3 == 0) false, можемо закључити да је вредност целог логичког израза (x % 3 == 0) && ((x + y) > = 0) false, без рачунања вредности другог операнда, на основу лењог израчунавања.
Како је вредност подизраза y + 2 == 4 true (2 + 2 = 4, а 4 == 4), можемо закључити, без рачунања вредности другог операнда, да наш израз (y + 2 == 4) || ( x / 3 != 0) има вредност true, на основу лењог израчунавања.
Пример 2. За i = 1, j = 2, k = 4, одредити вредност следећих израза: