Логички оператори¶
До сада си научио да, са аспекта логике, програмски језик 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\).