3

C 標準は、ブール演算 ( ==!=>&&||など) が常に同じ値を持ち、真実性を表すことを保証しますか? 言い換えれば、true の場合、常に何らかの正の定数を返しますか、それとも正の数になるという唯一の保証ですか?

私がこれを尋ねているのは、以下のようなステートメントが有効かどうかを知るためです。両方のポインターが NULL であるか、両方のポインターがどこか (必ずしも同じ場所である必要はありません) を指している場合、その式は true になります。

if ((ptr1 == NULL) == (ptr2 == NULL)) 
4

3 に答える 3

7

はい、C によるブール値としての整数値の解釈0の規則は false であり、他の値は true (a)であると述べていますが、比較演算子の結果は常に1or0です。

したがって、式は、たとえば(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 : 、whiledoおよびを扱う 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.

于 2012-05-08T10:13:45.557 に答える
1

はい。

演算子によって生成される値は、true の場合は常に 1 で、false の場合は 0 です。

于 2012-05-08T10:11:40.480 に答える
0

の結果

  • 否定演算子 ( !)

  • 関係演算子 ( <><=>=)

  • 等値演算子 ( ==, !=)

    論理演算子 ( &&,   ||)

(false) または(true)のいずれかのint値です。01

于 2012-05-08T10:19:28.620 に答える