- ベストアンサー
Long Int と Int の使い分けは
今晩は、Cの初心者です、宜しくお願いします。 データーの型で、IntとLong Intがあっていどちらも4Bytesで扱えるデーターの範囲も同じなのですが、 Long Intはどのようなときに使うのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Intってのは、int LongIntてのは、long のことですか? とりあえず、そうだとして、 C言語では移植性というのを大事にします。 intは、サイズは4バイトと決まっているわけではないです。intはその環境で一番扱いやすい大きさというのことになっていて、32bitマシンだとそれがたまたま4バイトになっているということです。 longは必ず4バイト以上ってことは決まっていますが、これも4バイト以上のもっと大きい場合もありえます。(8バイトとか) そうですね。私の意見を言えば、基本的に、long、short は使ってはいけません。 Cの組み込み型で使っていいのは、char(ただし文字の格納以外の用途には使わない)、int、unsigned intの3種類だけです。 intですむところはintを使いましょう。(サイズがあまり気にならないところ) で、必ず、4バイトのサイズがほしいところなんかでは、longの代わりに、int32_t、uint32_tを使いましょう。
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
C の話なら C のカテゴリにいくべきだと思うが. 「バイト数」が決まっている型は char (とその符号付き/符号なしバージョン) のみで, その「バイト数」は必ず 1 です. もちろん char系の配列もその要素数から「バイト数」が決まりますが, それ以外のすべての型の「バイト数」は処理系に依存します. ビット数は下限が決まっていて ・char: 8ビット以上 ・short int: 16ビット以上 ・long int: 32ビット以上 ・long long int: 64ビット以上 です (int は「short int 以上 long int 以下」). これを念頭に置いて決めるのが本当. ちなみにとても嫌なことですが「long int が 4バイト以上」とも決まっていないです. 残りですが, まず「動的配列」とはどのようなものをイメージしているのでしょうか? 要素数が可変であればいい? それとも動的にメモリを割り当てる? あと, 配列の要素数を返す「関数」は C の範囲では書くことができません. 配列を関数に渡そうとしてもポインタに自動的に変換されてしまい, この時点で「要素数」の情報が落ちてしまいます. でしょうがないので, 「配列全体のバイト数」を「1個の要素のバイト数」で割る, と. C++ なら書けるんだけどね.
- NINJA104
- ベストアンサー率43% (133/306)
単純なint形はプラットフォーム依存で4バイトになったり2バイトになったりします。 32bitの環境ではおっしゃる様に4バイトですが、16bitの環境では2バイトになってしまうという事です。 単純に値だけの参照を行うコードを書く分には問題は発生しませんが、ポインタ参照などで例えば4バイトを前提にアドレスの増減を行って書き換えや参照を行うと、バグの原因になります。 long intという定義は、どのプラットフォームでも*明確*に4バイトを定義します。対してshort intという定義もあり、こちらは2バイトです。 つまり、32bitプラットフォームに依存するコードであれば、intでもlong intでも同じです。お好きな方で書いてください。 プラットフォーム依存を無くしたい場合は、明確にする為にも単なるint定義は止めた方が良いでしょう。 サイズ(バイト数)が気になる場合は、sizeof()を利用してください。
お礼
皆さん、早速の回答有り難う御座います。 Cは色々と処理系に依存する部分があると書いていましたが、そういうことですか。 有り難う御座いました。 ところで再度の質問になるのですが、Cの場合は動的配列の宣言は出来るのですか、それと今ググっているのですが、 配列の要素数を返す関数ってどうかくのでしょうか。 あつかましいお願いかもしれませんが、宜しくお願いします。