• ベストアンサー

型について

Cの型の中にint と long int がありますけどこの違いは何なのでしょうか?本にはどちらも4ビットの整数(long intは長整数となっていますが)-2147486648~2147483647となっていますが・・。 同様にdouble と long double は何が違うのでしょうか? 初歩的なところですがよろしくおねがいします。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

各種類の値が何バイトになるのかはC言語としては決まっていません。 コンパイラによって色々です。intが2バイトでlong intが4バイトのものもあれば、intもlong intも4バイトのものもあれば、intが4バイトでlong intが8バイトのものもあります。 doubleとlong doubleも同じ関係。

poyo3
質問者

お礼

そういうものなんですか。相対的にint より long intの方が長くなるという感じなんですね。回答ありがとうございます。

その他の回答 (3)

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

ああそうそう, ・double が 8バイトで long double が 12バイト って環境はあった. ちなみに「int と long long int が一致する」ならその間に挟まれる long int も自動的にそれらに一致しますし, 「long long double」なる型は (規格には) 存在しません.

回答No.3

Cでデフォルトの型でもある「int」は、一番高速に計算できるビット数になります。 たいていの場合は、利用しているコンパイラが何ビットモードでコンパイルしているかに依存します。 「int」が「long int」に一致するというのならば、32bitのコンパイラで確認しているのでしょう。 もしも、これが64bitだった場合、「int」は「long long int」に一致することになります。 異なるビットの環境で動かない時というのは、こういった部分が原因している場合が多いです。 もしも、コーディングしていて、幅がかわったら困るような時は stdint.h をインクルードして int16_t など利用するとよいと思います。 あるいは、「int」でなく「short int」と記述するか。。。 「double」の方はわかりません。 でも、おそらくは同じ理由で64bitモードならば「long long double」に一致するのではないでしょうか。

poyo3
質問者

お礼

型もコンパイラにあわせて考えないといけないですね。 int自体の大きさも固定ではないのですね。回答ありがとうございます。

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

いかなる場合においても「long int は int より短かくない」し「long double は double より短かくない」ということ*だけ*は確実です. ただしこれらが違うかどうかは処理系に依存しますし, 具体的にこれらの型が何バイトであるかも規格には定められていません. ぶっちゃけていえば, 規格上は「long が 1バイトの環境」だってあっていい.

poyo3
質問者

お礼

やはり相対的なもので個々は決まってないということなんですね。 回答ありがとうございます。

関連するQ&A