如何评估 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);
}
函数应该 return 1 因为 a=0,b=1 和 c=1 但它 returns -1。
此外,当 a=1、b=1 和 c=1 时,它 returns -2 而不是 0.
为什么会这样?我该如何解决?
这是因为您使用的是所谓的按位运算符,它们分别处理数字的每一位。
所以假设 int
是 32 位,你有:
a = 00000000000000000000000000000000
b = 00000000000000000000000000000001
c = 00000000000000000000000000000001
~c = 11111111111111111111111111111110
b|~c = 11111111111111111111111111111111
等等。
如果您使用 逻辑运算符 &&
、||
和 !
,则每个数字将被视为单个 "bit"(如果为 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);
}
~
运算符翻转数字中的所有位,这不是您想要的,也是您得到 -1 的原因。
您还需要 ||
而不是 |
和 &&
而不是 &
。 &
和 |
运算符作用于单个位,而 ||
和 &&
是逻辑运算符,可以做你想做的事。
我想在 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);
}
函数应该 return 1 因为 a=0,b=1 和 c=1 但它 returns -1。 此外,当 a=1、b=1 和 c=1 时,它 returns -2 而不是 0.
为什么会这样?我该如何解决?
这是因为您使用的是所谓的按位运算符,它们分别处理数字的每一位。
所以假设 int
是 32 位,你有:
a = 00000000000000000000000000000000
b = 00000000000000000000000000000001
c = 00000000000000000000000000000001
~c = 11111111111111111111111111111110
b|~c = 11111111111111111111111111111111
等等。
如果您使用 逻辑运算符 &&
、||
和 !
,则每个数字将被视为单个 "bit"(如果为 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);
}
~
运算符翻转数字中的所有位,这不是您想要的,也是您得到 -1 的原因。
您还需要 ||
而不是 |
和 &&
而不是 &
。 &
和 |
运算符作用于单个位,而 ||
和 &&
是逻辑运算符,可以做你想做的事。