C中的"真"总是意味着1吗?

Bre*_*men 0 c if-statement

请考虑这些C代码:

if ((value & 1) == 1)
{

}
Run Code Online (Sandbox Code Playgroud)

假设值等于1,将(value & 1)返回1还是任何未指定的非零数字?

Gov*_*mar 7

§6.5.8关系运算符

如果指定的关系为真,则每个运算符<(小于),>(大于),<=(小于或等于)和> =(大于或等于)将产生1,如果是,则为0 false.)结果的类型为int.

§6.5.9平等运营商

==(等于)和!=(不等于)运算符类似于关系运算符,除了它们的优先级较低.)如果指定的关系为真,则每个运算符产生1,如果为假,则每个运算符产生0.结果是int类型.对于任何一对操作数,其中一个关系是正确的.

§6.5.13逻辑AND运算符

如果&&运算符的两个操作数都不等于0,则它将产生1; 否则,它产生0.结果类型为int.

§6.5.14逻辑OR运算符

|| 如果操作数的任何一个比较不等于0,则运算符应该为1; 否则,它产生0.结果类型为int.

  • 这是回答标题中的问题还是代码中的问题? (3认同)

P.P*_*.P. 6

C 语言中的“true”总是意味着 1 吗?

不。任何计算结果为非零值的表达式在 C 中都是“真”。例如,

if (-1) {
}

if (5-10) {
}

if( "string literal") {
}
Run Code Online (Sandbox Code Playgroud)

都是“真”并通过条件。

在您的具体示例中,关系运算符==产生 1,这也是“真”(Govind 指出的所有其他关系运算符也是如此)。


如果您真的要问&value为1 时按位 AND ( ) 是否产生 1 ,那么是的,value & 1产生 1(假设value是整数类型——&运算符要求其操作数为整数)。

事实上,您可以尝试使用一个简单的程序来理解各个部分和(通常是&and==运算符的行为):

#include <stdio.h>

int main(void)
{
  int value = 1;
  printf(" value & 1 = %d\n", value & 1);
  printf(" 2 & 1 = %d\n", 2 & 1);
  printf("((value & 1) == 1) = %d", (value & 1) == 1);
}
Run Code Online (Sandbox Code Playgroud)