Логички изрази

Логички изрази служе за поређење различитих података и за друге логичке операције. То су изрази састављени од логичких операнада повезаних логичким операторима. Логички операнди су релацијски изрази или логички изрази.

Логички оператори који се користе у језику C# су:

оператор коњункције - && (and) који проверава да ли су оба израза тачна
оператор дисјункције - || (or) који проверава да ли је макар један израз тачан
оператор негације - ! (not) који има истиниту вредност само када је израз нетачан

     Приоритет логичких оператора:

Логички оператори имају већи приоритет од релационих оператора (<, >, <=, >=, ==, !=). Највиши приоритет од логичких оператора има оператор !, затим && и на крају ||.

    Дефинисање логичких израза
  1. Логичке константе True и False су логички изрази
  2. Логичке променљиве (типа Boolean) су логички изрази
  3. Релацијски изрази су логички изрази
  4. Позиви логичких функција су логички изрази
  5. Ако су 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, одредити вредност следећих израза:

  1. (x * y != 0) && (y > x)

  2. (x % y > 0) || (y > x)

  3. (x % 3 == 0) && ((x + y) > = 0)

  4. (y % 2 == 0) || ( x / 3 != 0)



Пример 2. За i = 1, j = 2, k = 4, одредити вредност следећих израза:

  1. (i < j) && (k != i)

  2. ((i + j) >= k) || (i == 2)

  3. !(j < k)

  4. ((k - j) > i ) && (k == 4)



Пример 3. Записати у облику логичких израза:

  1. x Є [ 0, 1 ]

  2. x Є [ -1, 1 ] U [ 2, 5 ]

  3. Бар један од целих бројева x, y, z је позитиван

  4. Сва три броја x, y, z су позитивна