Does “true” in C always mean 1?

末鹿安然 提交于 2020-11-29 10:40:34

问题


Please consider these piece of C code:

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

}

Assuming value equals 1, will (value & 1) return 1 or any unspecified non zero number?


回答1:


§6.5.8 Relational operators

Each of the operators < (less than), > (greater than), <= (less than or equal to), and >= (greater than or equal to) shall yield 1 if the specified relation is true and 0 if it is false.) The result has type int.

§6.5.9 Equality operators

The == (equal to) and != (not equal to) operators are analogous to the relational operators except for their lower precedence.) Each of the operators yields 1 if the specified relation is true and 0 if it is false. The result has type int. For any pair of operands, exactly one of the relations is true.

§6.5.13 Logical AND operator

The && operator shall yield 1 if both of its operands compare unequal to 0; otherwise, it yields 0. The result has type int.

§6.5.14 Logical OR operator

The || operator shall yield 1 if either of its operands compare unequal to 0; otherwise, it yields 0. The result has type int.




回答2:


Does “true” in C always mean 1?

No. Any expression that evaluates to a non-zero value is "true" in C. For example,

if (-1) {
}

if (5-10) {
}

if( "string literal") {
}

are all "true" and pass the condition.

In your specific example, the relational operator == yields 1 which is also "true"(the same holds for all other relational operators as noted by Govind).


If you are really asking about whether the bit-wise AND (&) yields 1 when value is 1, then yes, value & 1 yields 1 (assuming value is an integer type -- & operator requires its operands to be integers).

In fact, you can probably try to understand the individual parts and (generally how the & and == operators behave) by using a simple program:

#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);
}


来源:https://stackoverflow.com/questions/41926288/does-true-in-c-always-mean-1

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!