• ベストアンサー

定数の型について

独習Cという本に「デフォルトでは、Cコンパイラは数値定数を互換性のあるデータ型のうちその数が収まる最小の型であると見なします。intを16ビットと仮定すると、10はデフォルトでintとなり、100003はlongになります。」と書いてあるのですが、なぜ10はshortではなくintになるのですか? 回答お願い致します。

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

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

規格を確認しましたが, int → unsigned int → long → unsigned long (→ long long → unsigned long long) の順に調べていきます (long long 以降は今の規格に従う場合). 従って, 整定数の型が short になることは (int と short のビット数が同じかどうかとは無関係に) ありえません. たとえ short = 16ビット, int = 32ビット, long = 64ビットの環境でも「10」と書けば (int で表現できるので) 必ず int です.

s5210
質問者

お礼

規格で決められているのですね。 簡潔な回答有り難うございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★回答 ・定数はshort型よりint型か標準だから。→『デフォルト』ってことだよ。 ・int型→int型 ・short型→short int型 ・long型→long int型 ・ですのでshort型とint型のビット数が同じならばint型が『デフォルト』になります。 ・分かりますか? ・なお、short型は必ず16ビットの整数で処理したい場合に指定する型です。 ・通常は、int型を使いますか……。→これは、int型が32ビットのとき16ビットの型が  ないと困るのでそのときにshort型を使う。 ・int型、short型、long型のビット数と範囲をよく理解しておきましょう。 ・最後に、回答者 No.2 さんの『規格上』の決め事なのですよ。→shortではなくintになるのは。 ・では、さようなら。→疑問に持った『あなた』はC言語の仕組みをその内理解できるでしょう。

s5210
質問者

お礼

詳しく書かれていたのでよくわかりました。 ご回答どうもありがとうございました。

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

整定数の場合, 「int → unsigned int → long → unsigned long」の順に調べるんじゃなかったかなぁ? 歴史的事情で short の定数を書くのは不可能だったはず. ちなみにですが, それぞれの型のビット数は規格上 char ≧ 8ビット short ≧ 16ビット long ≧ 32ビット char ≦ short ≦ int ≦ long しか決まってません.

s5210
質問者

お礼

参考にさせていただきました。 ご回答どうもありがとうございました。

すると、全ての回答が全文表示されます。
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

「intを16ビットと仮定すると」って書いてありますね? int型のビット数は「その処理系で数値を扱う場合の、標準のビット数」です。ここでは「16ビットと仮定」されてます。 short型のビット数は「16ビット」です。 つまり、その「仮定されたコンパイラ」はintもshortも16ビットで、shortって書く意味が無いからです。 「intを16ビットと仮定すると」の中には「intもshortも同じビット数と仮定するなら」と言う仮定が含まれているのですよ。

s5210
質問者

お礼

なるほど、そういう考え方も出来ますね。 ご回答どうもありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A