繁体   English   中英

如何在C中评估布尔表达式?

[英]How to evaluate a boolean expression in 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);
}

由于a = 0,b = 1和c = 1,该函数应返回1,但它返回-1。 同样,当a = 1,b = 1和c = 1时,它返回-2而不是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);
}

~运算符翻转数字中的所有位,这不是您想要的,也不知道为什么得到-1。

您还需要|| 代替| &&而不是& &| 运算符处理单个位,其中|| &&是逻辑运算符,可以执行您想要的操作。

这是因为您正在使用所谓的按位运算符 ,它们分别对数字的每一位起作用。

因此,假设int是32位,则您具有:

a    = 00000000000000000000000000000000
b    = 00000000000000000000000000000001
c    = 00000000000000000000000000000001
~c   = 11111111111111111111111111111110
b|~c = 11111111111111111111111111111111

等等。

如果使用逻辑运算符 &&|| ! 而是将每个数字都视为一个单独的“位”(如果为0,则为0;如果不是0,则为1)。

或者,您可以在末尾添加& 1 ,以确保除最后一位外的所有位均为0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM