Я хочу, чтобы оценить следующее логическое выражение в C:Как оценить булево выражение в C?
f = (b+c')(a'+c')(a+b'+c)
Это моя текущая программа:
#include <stdio.h>
int main()
{
int a,b,c,f;
a=0;b=1;c=1;
f=((b|(~c))&((~a)|(~c))&(a|(~b)|c));
printf("%d\n",f);
}
Функция должна возвращать 1, так как а = 0, Ь = 1 и с = 1 но он возвращает -1. Кроме того, когда a = 1, b = 1 и c = 1, он возвращает -2 вместо 0.
Почему это происходит? Как я могу это исправить?
* Логическая * семантика в C предоставляется через операторы '!', '||' и '&&'. Операторы '~', '|' и '&' реализуют * поразрядную * семантику, что совсем другое. – AnT
Обратите внимание, что C также имеет логический тип, вам не нужно использовать * int *, если вы хотите сделать его явным, вы имеете дело с булевыми. – hyde