- 締切済み
64ビット整数について…
long long型を使用したいのですが、 lomg long型は64ビット整数となるのでしょうか? 32ビットOSでも使用できるのでしょうか? OS:Vine Linux3.1 コンパイラ:gcc-3.2.2 無知で申し訳ありませんが、 回答宜しく御願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- jacta
- ベストアンサー率26% (845/3158)
> lomg long型は64ビット整数となるのでしょうか? long long型は少なくとも-9223372036854775807~+9223372036854775807の範囲を表現することができる符号付き整数型です。 実際の表現範囲は、<limits.h>の中のLLONG_MINおよびLLONG_MAXマクロを調べてください。 > 32ビットOSでも使用できるのでしょうか? 使用できるかどうかについては、OSが何であるかは直接関係ありません。 C99に対応したコンパイラであれば、例え8ビットのプラットフォームであっても使用できます。 > OS:Vine Linux3.1 > コンパイラ:gcc-3.2.2 この組合せで常にそうかどうかは分かりませんが、多くの場合、long long型は64ビットだと考えてよいでしょう。 なお、gcc-3.2.2でターゲットがh8300の場合、long long型は32ビットだったと思います。確か、gcc-3.4あたりから64ビットになったような記憶があります。 今回は関係ないと思いますが、念のため。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★gccには詳しくありませんが1つ。 ・gcc v3.2.2 なら long long 型は使えると思います。 今回の質問は >32ビットOSでも使用できるのでしょうか? ですよね。 これは CPU によって使えるかどうか? ということでしょ。 ・私の推測ですが long long 型がもし利用できる処理系ならば、 CPU で 64 ビット整数が利用できなくても利用できるように エミュレーションしてくれるように切り替わるのでは。 と思っています。実際に確認していないため CPU を調べて 実際にテストしてみないと分かりません。 テストする時も単純に long long 型が使えるだけではなく 処理速度にも差が出てくると思います。 ・例えば VC++2003 以降では long long 型が利用できますが、 VC++ 6.0 では使えません。でも windows 用の型で ULONGLONG や DWORDLONG 型があって擬似的に 64 ビット整数を使えるようにしています。 でも擬似的ですので処理速度に明らかに違いがあります。つまり遅い。 ・よって32ビットOS(CPU)で64ビット整数が使えない場合は gcc がどう 処理するか調べてみて下さい。確認できない場合は最初から 64 ビット整数を 扱う仕組みをプログラマ側が用意しておきます。また、CPU の命令を調べ 64 ビット整数が扱える場合は long long 型で処理させるように分岐するとか。 ・いろいろと工夫してみて下さい。
- asuncion
- ベストアンサー率33% (2127/6290)
私だったら… > long long型を使用したい こう思った時点で、sizeof(long long) を出力するための コードを書いて、結果がどうなるか「自分で」確認します。