はい、C によるブール値としての整数値の解釈0
の規則は false であり、他の値は true (a)であると述べていますが、比較演算子の結果は常に1
or0
です。
したがって、式は、たとえば(a == b)
を与えることはありません。42
標準 (C11) の関連ビットはすべて次の6.5 Expressions
とおりです。
6.5.8/6: 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.
6.5.9/3: 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.
6.5.13/3: The && operator shall yield 1 if both of its operands compare unequal to 0; otherwise, it yields 0.
6.5.14/3: The || operator shall yield 1 if either of its operands compare unequal to 0; otherwise, it yields 0.
これは、質問で明示的に言及したすべてのものをカバーしています。私が考えることができる唯一の他のブール演算 (頭のてっぺんから) は、論理 NOT 演算子!
であり、これもカバーされています。
6.5.3.3/5: The result of the logical negation operator ! is 0 if the value of its operand compares unequal to 0, 1 if the value of its operand compares equal to 0.
(a)if
: 、while
、do
およびを扱う C11 セクションを参照してくださいfor
。これらにはすべて、 if/while が発生するという行に沿った言語が含まれています"the expression compares unequal to zero"
。具体的には:
6.8.4.1/2: In both forms [of the if statement, one with and one without an else clause], the first substatement is executed if the expression compares unequal to 0. In the else form, the second substatement is executed if the expression compares equal to 0.
6.8.5/4: An iteration statement [while, do and for] causes a statement called the loop body to be executed repeatedly until the controlling expression compares equal to 0.