- ベストアンサー
Cで困っています。
学校でC言語を勉強しているんですが分からないところがありました。 問、int型の変数n1,n2,n3の値がそれぞれ15,7,0である時 各式を0か1で評価せよ 1)!n1 2)!n3 1)の答えが0、2)の答えが1 らしいんですけどまったく理解できません。 分かりますか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ANo1です。 勉強という意味ではANo2の方の記述を丸呑みでOKです。 コンピューターはあるかないかでしか判断できないと言うことを念頭においてください。 int変数がりんごの個数なのか今日の降雨量なのか今までの人生でドラゴンボールのカメハメハの真似事をした回数なのか、何の数字かはわからなくても、0だったら"なし"、1より高い値なら"ある"ってことになりますよね。 結果として、1以上なら"ある""スイッチオン"となり、0なら"ない""スイッチオフ"となります。 「0か1で評価せよ」ってことは、「あるのかないのか」「スイッチオンなのかオフなのか」二択で答えてっていってることになります。 なのでこの問題では結果的に、問題の値が0のときしか回答が1にはなりません。 - - - - - - - - - - もっといろいろ深い理論や他言語での違いがあったりするんだけど、ひとまず今は学校の点をとる為にANo2の方の記述を丸暗記するのを優先してくださいませ。(回答しといてナンダケド)
その他の回答 (4)
- yaemon_2006
- ベストアンサー率22% (50/220)
"!a"は、"a == 0"と同じ。 "!n1"は、"n1 == 0"で偽、よって"0"を返す。 "!n3"は、"n3 == 0"で真、よって"1"を返す。
お礼
なるほど。0以外の数字は1とみなすんですね。 回答ありがとうございました。
- aris-wiz
- ベストアンサー率38% (96/252)
>という事はここが0のときだけスイッチオンになるんですか? そうです。論理型的に説明すると、 コンピュータ上の条件式は 0=偽 0以外=真となります。 この真偽値を通常は0と1で表し、0を偽、1を真としています。 !(NOT演算子)を0以外につけた場合、 「0以外では無い」=「0である」=「偽」真偽値は「0」となり、逆に 「0ではない」」=「0以外である」=「真」真偽値は「1」となります。
お礼
C苦手で困っていたので・・・。 回答ありがとうございました。
- BearCave
- ベストアンサー率20% (189/909)
整数型の前に「!」を付けると、その整数が0の場合は1になり、それ以外の場合は0になります。
お礼
理解できました。 回答ありがとうございます。
- benelli
- ベストアンサー率51% (78/152)
!は「~~」の反対って意味。 そしてコンピューターの世界で"0か1か"と問われた場合はその0と1は数字ではなくスイッチがオンかオフかという意味になります。 んで、Cの場合は整数(int型)の場合は0がスイッチオフ、1以上の整数がスイッチオンという意味になる。 よって、以下の意味になる。 !n1 これは整数15の逆→だからスイッチオンの逆→スイッチオフ→"0か1か"では0 !n3 これは整数0の逆 →だからスイッチオフの逆→スイッチオン→"0か1か"では1 ということになるわけです。 納得できないかも知れませんが、二進数でしか表現できないコンピューターではこう考えないと物事が成り立たないんです。 勉強がんばってください。
補足
>これは整数0の逆 →だからスイッチオフの逆→スイッチオン ↑ という事はここが0のときだけスイッチオンになるんですか?
お礼
なるほど。ここでいうと、0だけがアウェイなんですね。 回答(返答)ありがとうございました。