• ベストアンサー

C言語において、=と==の違いって何ですか?

C言語でプログラムを組むなかで例えば、 x = a + b 等の数式ではただの = 一個を使いますよね? だけど、 !=EOF においては使っているのは == ですよね? 基本的なことだとは分かっているのですがこの違いって何なんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

プログラムを数学は分けて考える必要があります。 > x = a + b > 等の数式ではただの = 一個を使いますよね? これを、数学的に「 x は a+b に等しい 」だと考えてはいけません。 それだと、プログラムでよく出てくる a = a + 1 等は成立しません。 代入といって、意味としては「xを a + bにする」となります。もっと直感的な記号を使うなら「 x ← a + b 」となるでしょう。 代入と区別するために、数学的な「等しい関係」を表現する等号には「==」を使います。 C言語では、 = は代入演算子といって、式の一部です。代入した値を「式の値」とします。その「式の値」をそのまま利用したり、別の式の一部として利用したりできます。 よく見掛ける while( ( c = getchar() ) == '\n' ) だと 1) ( c = getchar() ) を評価。 getchar()の値を cに代入。全体としてその代入した値になる。 2) 1)の値と '\n' を比較して、等しければ真(非0),等しくなければ偽(0)。ここでは代入は無い。 という意味になります。 このあたりの使い方は言語によって違います。 ・文脈で使いわける ・=は比較で、代入には別の記号を使う ・代入は命令で、式の一部としては利用できない など

noname#177863
質問者

お礼

なるほど、よく意味がわかりました。 ==が意味するのは真偽のみでしかないのですね。

その他の回答 (3)

  • tda410
  • ベストアンサー率40% (2/5)
回答No.4

'='が代入演算子、'=='が等値演算子というものは、他の方の説明通りです。 代入演算子についてはもうひとつ大事な観点があり、代入演算子の左辺では評価結果が左辺値となり、 格納した値を表す右辺値の場合とは意味合いが異なるということです。 int x = 10; x = x + 1; とある場合、左辺値は値を格納する入れ物としてあつかわれていて、右辺値としては、格納されている10として扱われる、ということです。

  • MAXIMAX
  • ベストアンサー率60% (50/83)
回答No.2

"代入演算子"と"比較演算子"ということで明確に違う系統の"演算子"です。幾つかの言語系では、= が使われる場所によってインタプリタやコンパイラがどちらかを判断しているものがありますが、C では「演算子」としてどこでも使えるものなので、明確に違うものを用意しています。 代入演算子は、「変数に値を代入し、代入した値を返す」演算子 比較演算子は、「2つの値を比較し、その結果を真偽値で返す」演算子 です。 int a=1; printf("%d\n", a==5); printf("%d\n", a=5); printf("%d\n", a==5); printf("%d\n", a=6+3); printf("%d\n", a==(a=6+3)); こんな感じで、各演算子は値を返していることがわかるかと思います。if や while などは、() の中が 0 かそれ以外か、を判断しているに過ぎません。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

代入が = で、等値比較が == です。 数学の = が、Cの == にあたります。C以外の多くのプログラミング言語でもそうですが。 Cの = は、数学では、「~を~と置く」などと表現されますね。「x = a + b」だと、「a+bをxと置く」。

関連するQ&A