• ベストアンサー

c言語で変数の型の有効範囲を調べたい

c言語で、変数の型が扱える数値の範囲を調べる方法や計算式などありますか?回答よろしくお願いします。

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

  • ベストアンサー
noname#245945
noname#245945
回答No.3

#2です。 型のサイズは型のビット数のことです。 >例: sizeof(short) == 16 の場合 >例: sizeof(int) == 32 の場合 は 例: sizeof(short) == 2 の場合 例: sizeof(int) == 4 の場合 の誤りでした。

noname#113783
質問者

お礼

ありがとうございます。これでfloatとdoubleも分かります。 回答ありがとうございました!

その他の回答 (4)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.5

float型をのぞいて考えるなら、 1.変数:xを0で初期化する。 2.変数xに1加算する。 3.加算前のx<加算後のxなら、上記2に戻る。 4.上記3以外なら、この加算前のxが最大値となる。 従って、このxを印字することにより、最大値がわかる。 同様にして、負の最大値は、1を引き続けていけば、 結果が得られます。

noname#113783
質問者

お礼

limits.hに載ってない型で便利ですね! 回答ありがとうございました。

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

あらかじめ型が分かっているなら #1 のように limits.h (や float.h) を使うのがよろしいかと. そうでない (たとえば「変数 x で扱える数値の範囲」を知りたい) 場合には, 「どんな環境でも使える」方法は存在しません. #2 のようにして範囲が分かることもありますが, それが正しくないこともあり得ます. 規格上「値の表現に関与しないビット」が存在してもかまいません. したがって値を表現するために使うビット数 N は N ≦ sizeof(x) * CHAR_BIT で, この N を使って「表現できる値は 0 以上 2^N-1 以下」となります. 同様に符号ありの場合には「-(2^(N-1)-1) 以上 2^(N-1)-1 以下」です. もちろん「short なら SHORT_MIN 以上 SHORT_MAX 以下を表現できる」とか「unsigned long long なら 0 以上 ULLONG_MAX 以下を表現できる」とかいった条件は別途存在します. これは short や unsigned long long などのバイト数によらず成り立つので, よしんば sizeof (unsigned long long) = 1 という環境であっても適用されます.

noname#113783
質問者

お礼

データ型のことでした。 データ型という言葉を最近知りました(汗)。 回答ありがとうございました!

noname#245945
noname#245945
回答No.2

符号付整数型の場合、 -2^(型のサイズ-1) ~ 2^(型のサイズ-1)-1 となります。 例: sizeof(short) == 16 の場合 -2^(16-1) ~ 2^(16-1)-1 → -32768~32767  符号無整数型の場合、 0 ~ 2^型のサイズ-1 となります。 例: sizeof(int) == 32 の場合 0 ~ 2^32-1 → 4294967295 浮動小数点数型の場合、IEEE754であれば 単精度浮動小数点数 2^(-126) ~ 約 2.0*2^127 倍精度浮動小数点数 2^(-1022) ~ 約 2.0*2^1023 となります。

回答No.1

今日の占い:limits.hで調べると吉

noname#113783
質問者

お礼

limits.hは整数型の大きさを表すマクロが入っているヘッダファイルなんですね。 ↓wikiでの説明 http://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96C%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA#.E6.95.B4.E6.95.B0.E5.9E.8B.E3.81.AE.E5.A4.A7.E3.81.8D.E3.81.95_.3Climits.h.3E

関連するQ&A