Логички оператори

До сада си научио да, са аспекта логике, програмски језик C сваки операнд посматра на следећи начин: логичкој вредности тачно одговара сваки операнд чија је вредност различита од нуле, а логичкој вредности нетачно одговара сваки операнд чија је вредност једнака нули. Због тога, логички оператори за логичку вредност тачно дају целобројну вредност 1 типа int, односно, за логичку вредност нетачно дају целобројну вредност 0 типа int.

Логички НЕ оператор

Оператор негације је унарни оператор, представља се карактером ! и назива логички НЕ (енгл. logical-NOT) оператор. Има приоритет 2 и десну асоцијативност. Оператор ! даје вредност 1 када његов операнд има вредност нула (логички нетачно), односно, даје вредност 0 када његов операнд има вредност различиту од нуле (логички тачно).

Таблица истинитости за логичко НЕ:

\(A\)

\(\neg A\)

\(\top\)

\(\bot\)

\(\bot\)

\(\top\)

Напиши програм у програмском језику C којим се на стандардни излаз исписује негирана вредност броја различитог од нуле и негирана вредност броја једнаког нули.

#include <stdio.h>

int main(void)
{
    int a = 2, b = 0;
    printf("%d %d", !a, !b);
    return 0;
}

На стандардном излазу ће се исписати…

0 1

…јер негирана вредност различита од нуле коју има оператор a резултује \(0\), односно, негирана вредност нула коју има оператор b резултује \(1\).

Логички И оператор

Оператор логичке конјункције је бинарни оператор, представља се карактером && и назива логички И (енгл. logical-AND) оператор. Има приоритет 11 и леву асоцијативност. Оператор && даје вредност \(1\) само ако су оба операнда различита од нуле (логички тачна), а у свим другим случајевима даје вредност \(0\).

Таблица истинитости за логичко И:

\(A\)

\(B\)

\(A \land B\)

\(\top\)

\(\top\)

\(\top\)

\(\top\)

\(\bot\)

\(\bot\)

\(\bot\)

\(\top\)

\(\bot\)

\(\bot\)

\(\bot\)

\(\bot\)

Напиши програм у програмском језику C којим се на стандардни излаз исписује вредност примене оператора && над два броја различита од нуле.

#include <stdio.h>

int main(void)
{
    int a = 1, b = 2;
    printf("%d", a && b);
    return 0;
}

На стандардном излазу ће се исписати:

1

јер се конјункција оператора чије су вредности различите од нуле добија \(1\), док би се након извршења следећег програма:

#include <stdio.h>

int main(void)
{
    int a = 0, b = 2;
    printf("%d", a && b);
    return 0;
}

на стандардном излазу исписала:

0

јер се конјункција оператора чија је вредност једнака нули са оператором чија је вредност различита од нуле добија \(0\). Исто важи ако је вредност првог оператора различита од нуле, а другог једнака нули или ако су вредности оба оператора једнака нули.

Логички ИЛИ оператор

Оператор логичке дисјункције је бинарни оператор, представља се карактером || и назива логички ИЛИ (енгл. logical-OR) оператор. Има приоритет 12 и леву асоцијативност. Оператор || даје вредност \(0\) само ако су оба операнда једнака нули (логички нетачна), а у свим осталим случајевима даје вредност \(1\).

Таблица истинитости за логичко ИЛИ:

\(A\)

\(B\)

\(A \lor B\)

\(\top\)

\(\top\)

\(\top\)

\(\top\)

\(\bot\)

\(\top\)

\(\bot\)

\(\top\)

\(\top\)

\(\bot\)

\(\bot\)

\(\bot\)

Напиши програм у програмском језику C којим се на стандардни излаз исписује вредност примене оператора || над два броја различита од нуле.

#include <stdio.h>

int main(void)
{
    int a = 1, b = 2;
    printf("%d", a || b);
    return 0;
}

На стандардном излазу ће се исписати:

1

јер се дисјункцијом оператора чије су вредности различите од нуле добија \(1\). Исто важи ако је вредност првог оператора различита од нуле, а другог једнака нули, или ако је вредност првог оператора једнака нули, а другог различита од нуле. Након извршења следећег програма…

#include <stdio.h>

int main(void)
{
    int a = 0, b = 0;
    printf("%d", a || b);
    return 0;
}

…на излазу ће се исписати…

0

…јер се дисјункцијом два оператора чија је вредност једнака нули добија \(0\).