重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

C言語でプログラムを組むなかで例えば、

x = a + b

等の数式ではただの = 一個を使いますよね?

だけど、

!=EOF

においては使っているのは == ですよね?

基本的なことだとは分かっているのですがこの違いって何なんでしょうか?

A 回答 (4件)

プログラムを数学は分けて考える必要があります。



> 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)。ここでは代入は無い。
という意味になります。


このあたりの使い方は言語によって違います。
・文脈で使いわける
・=は比較で、代入には別の記号を使う
・代入は命令で、式の一部としては利用できない
など
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/10/08 01:21

'='が代入演算子、'=='が等値演算子というものは、他の方の説明通りです。



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

とある場合、左辺値は値を格納する入れ物としてあつかわれていて、右辺値としては、格納されている10として扱われる、ということです。
    • good
    • 0

"代入演算子"と"比較演算子"ということで明確に違う系統の"演算子"です。

幾つかの言語系では、= が使われる場所によってインタプリタやコンパイラがどちらかを判断しているものがありますが、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 かそれ以外か、を判断しているに過ぎません。
    • good
    • 0

代入が = で、等値比較が == です。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!