-4

私はCに非常に慣れていないので、いくつかのサンプルコードを試していますが、ifステートメントのこれらの演算子が何を「求めている」のかわかりません。

コードは次のとおりです。

int main(void){

    int a = 99;

    int b = 0;

    int c = 74;

    if( a || b )
      printf("first\n");

    else
      printf("second\n");

    if( a && c )
      printf("third\n");

    else
      printf("fourth\n");

    if( !a )
      printf("fifth\n");

    else
      printf("sixth\n");

    if( (a && b) || c )
      printf("seventh\n");

    else
      printf("eighth\n");

    if( !c || !b )
      printf("nineth\n");

    else
      printf("tenth\n");
}

演算子の意味はわかりますが、「if」ステートメントを実行しているときに何が起こっているのかわかりません。誰かが私にこれを説明してもらえますか?

4

3 に答える 3

1

この質問に答える鍵は、C が論理演算に参加する整数をどのように扱うかを理解することです。

  • ゼロは次のように扱われます。FALSE
  • ゼロ以外のすべての値は、TRUE

コード スニペットの 3 つの演算子の真理値表は次のとおりです。

!FALSE -> TRUE
!TRUE  -> FALSE

FALSE || FALSE -> FALSE
FALSE || TRUE  -> TRUE
TRUE  || FALSE -> TRUE
TRUE  || TRUE  -> TRUE

FALSE && FALSE -> FALSE
FALSE && TRUE  -> FALSE
TRUE  && FALSE -> FALSE
TRUE  && TRUE  -> TRUE

複数の演算子が括弧なしの式で使用されている場合、単項!はバイナリ&&orの前に適用され||ます。

これで、出力を自分で把握するのに十分な情報が得られました。

于 2013-09-27T02:15:50.447 に答える
0

それらは単なる通常の演算子です。

|| = or
&& = and
! = not

そう...

if( a || b )
  printf("first\n");

言ってる…

if a or b then print "first"

と...

if ( !a )

は...

if not a

に相当:

if a is equal to 0 or NULL

本当に基本的なこと!

于 2013-09-27T02:16:06.700 に答える
0

bool 型の変数を使用している場合は、boolean 演算子について学ぶ方が簡単かもしれません。数値を true または false と見なすことはあまり一般的ではないため、int を処理する場合、boolean チェックはあまり役に立ちません。int では、通常、ブール論理ではあまり意味をなさない数値を考慮します

于 2013-09-27T02:24:16.037 に答える