• ベストアンサー

型についての質問

初歩的なことですが (1)int a = 120; このときaはint型ですが、120にも暗黙的にint型がつけられるのですか?そのように紹介してあるページがあったのですがほんとうでしょうか? (2)int a = 120; とかはいいのに、文字は char ch = 'A' のようになぜ文字は''でくくるのでしょうか?参考書にもそうとしか書いてなくて理由がのってません。

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

  • ベストアンサー
  • BLK314
  • ベストアンサー率55% (84/152)
回答No.8

>1)int a = 120; > >このときaはint型ですが、120にも暗黙的にint型がつけられるのですか?そのよ>うに紹介してあるページがあったのですがほんとうでしょうか? 本当です。 たとえば double a = 120 / 240 ではaは幾つになると思いますか? doubleで小数点を扱えるので0.5 ではありません。 正解は 0(正確を期すなら0.0と表記) です。 120にも240にも型があり、両方ともintです。 int ÷ int は intで計算します どちらか片方でもdoubleならdouble同士の割り算になるので double a = 120.0 / 240は 0.5 となります。 2)についてはたくさんの方が答えておられますので、詳細はさけます。 余談になりますが VC++では TCHAR a = _T('a'); と書くのがMSのお勧めです。 (めんどくさいです) Unicode/ANSIの対応が楽だからです。

szatmari
質問者

お礼

解答ありがとうございました。 >たとえば double a = 120 / 240 ではaは幾つになると思いますか? doubleで小数点を扱えるので0.5 ではありません。 正解は 0(正確を期すなら0.0と表記) です。 120にも240にも型があり、両方ともintです。 int ÷ int は intで計算します どちらか片方でもdoubleならdouble同士の割り算になるので double a = 120.0 / 240は 0.5 となります。 うーん、百聞は一見にしかずとはこのことですね。実際に動かしてみてなっとくしました。

その他の回答 (7)

  • infeeld
  • ベストアンサー率37% (3/8)
回答No.7

(1)その通りです。 代入先の型にあわせてくれます。 (2)文字は数値で扱いますが、「A」という文字が何の数値に対応しているかをいちいち覚えるのが面倒なので、''でくくれば数値に変換してくれるという便利な機能です。 以下のコードをコンパイル・実行してみてください。 #include <stdio.h> int main(int argc, char* argv[]) { char c = 'A'; int i = 'A'; printf("%c\n", c); printf("%d\n", c); printf("%c\n", i); printf("%d\n", i); } 文字と数字が表示されたでしょうか。 int i = 'A'; という書き方ができることから、「A」という文字が数値で扱われていることがお分かり頂けると思います。

szatmari
質問者

お礼

解答ありがとうございます。 >「A」という文字が何の数値に対応しているかをいちいち覚えるのが面倒なので、''でくくれば数値に変換してくれるという便利な機能です。 興味ぶかいプログラムありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.6

C では int, C++ では char でしたっけ>#5.

szatmari
質問者

お礼

皆さん、詳しいですね。すごいです!

noname#208124
noname#208124
回答No.5

むしろつっこみを入れるなら 'A'はC++ではchar型です

szatmari
質問者

お礼

解答ありがとうございます。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.4

ほかの人に突っ込まれないうちに 'A' = 65 はASCIIコード環境下での話です 他の文字コードでは違う場合もあります(EBSDICとか) ch = 'A' とすればどの環境でも文字'A'がchに入りますが ch = 65 だとASCII文字コード環境のみで 'A' となります。 文字として扱う場合には '文字'を使ったほうが移植性がよくなります。

szatmari
質問者

お礼

解答ありがとうございます。環境によるのですね。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

120 int型 120L long型 120.0 double型 120.0f float型 文字のほうがわかりやすいときは文字で書きますが 'A' は 整数の65と同じですので char ch = 'A'; と char ch = 65 はまったく同じものです 'A'はcharではなくintになります

szatmari
質問者

お礼

解答ありがとうございます。 勉強していると文字通り毎日が発見です。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

(2) はどっちかというと逆かなぁ. 「'' でくくったのが文字」だから.

szatmari
質問者

お礼

回答ありがとうございます。それが定義なのですね。

noname#259269
noname#259269
回答No.1

(1)そうです。 (2)そういう取り決めだからです。それに  char ch=A  だと、変数Aの中身を ch にコピーすることになります(コンパイラにとって区別が付きません)。 「1+1=2」の「+」に疑問をはさんでも仕方がないですよね? 「+」はその左右の数値を合算する意味を持つ、と取り決められているのと同じです。

szatmari
質問者

お礼

回答ありがとうございます。 >char ch=A  だと、変数Aの中身を ch にコピーすることになります(コンパイラにとって区別が付きません)。 納得しました。

関連するQ&A