如何在C语言中计算布尔表达式?
我想在C中计算以下布尔表达式:如何在C语言中计算布尔表达式?,c,function,boolean,boolean-expression,C,Function,Boolean,Boolean Expression,我想在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); } #包括 int main() { INTA、b、c、f; a=0;b=1;c=1; f=((b |(~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);
}
#包括
int main()
{
INTA、b、c、f;
a=0;b=1;c=1;
f=((b |(~c))和(~a)|(~c))和(a |(~b)| c));
printf(“%d\n”,f);
}
函数应该返回1,因为a=0、b=1和c=1,但它返回-1。
此外,当a=1、b=1和c=1时,它返回-2而不是0
为什么会发生这种情况?如何修复它?这是因为您使用的是所谓的按位运算符,它们分别处理数字的每一位 因此,假设
int
为32位,您有:
a = 00000000000000000000000000000000
b = 00000000000000000000000000000001
c = 00000000000000000000000000000001
~c = 11111111111111111111111111111110
b|~c = 11111111111111111111111111111111
等等
如果使用逻辑运算符&&
,| |
和相反,每个数字将被视为一个“位”(如果是0,则为0;如果不是0,则为1)
或者,您可以在末尾添加&1
,以确保除最后一位之外的所有位都是0。在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);
}
#包括
int main()
{
INTA、b、c、f;
a=0;b=1;c=1;
f=((b||(!c))和((!a)| |(!c))和(&(a||(!b)| c));
printf(“%d\n”,f);
}
~
操作符翻转数字中的所有位,这不是您想要的,也是您得到-1的原因
您还需要|
而不是|
和&&
而不是&
。&
和|
运算符处理单个位,其中|
和&&
是逻辑运算符,可以执行您想要的操作。C中的布尔语义是通过运算符提供的代码>,|
和&&
。操作符~
,|
和&
实现按位语义,这是一个完全不同的东西。请注意,C也有一个布尔类型,如果你想显式地处理布尔值,不必使用int。谢谢!你能详细解释一下你在末尾加&1是什么意思吗?谢谢,但是有没有办法用位运算符得到我所需要的输出?@kamoroso94f&1=((b|(~c))&(~a|(~c))和(a|(~b)~c))代码>像这样?@WhiteFlameAB不,更像这样:f=1&((b |(~c))&(~a |(~c))&(a |(~b)| c))代码>