• 締切済み

64ビット整数について…

long long型を使用したいのですが、 lomg long型は64ビット整数となるのでしょうか? 32ビットOSでも使用できるのでしょうか? OS:Vine Linux3.1 コンパイラ:gcc-3.2.2 無知で申し訳ありませんが、 回答宜しく御願い致します。

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

> 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)
回答No.2

★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% (2126/6288)
回答No.1

私だったら… > long long型を使用したい こう思った時点で、sizeof(long long) を出力するための コードを書いて、結果がどうなるか「自分で」確認します。

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

関連するQ&A

  • long long型について

    long long型を使用したいのですが、 コンパイルすると『未サポート』の警告がでます。 ※以前、下記質問をさせてもらいました。  http://okwave.jp/qa3407843.html​  http://okwave.jp/qa3425683.html OS:Vine Linux3.1 コンパイラ:gcc-3.2.2 になります。 また、__STDC_VERSION__が199901Lに定義もされていました。 以上、宜しく御願い致します。

  • 整数型からstring型への変換

    コンパイラはgcc4.0.3、OSはubuntuを使っています。 整数型の変数をstring型に変換したいのですが、 どのようにしたらよいでしょうか? itoaは無いみたいです。

  • 開発環境について

    CおよびC++などの勉強を考えているんですが、 よく企業の求人でC C++ができる方募集ってのを見かけます。 そこで質問なんですが、 一概にC C++って言っても、linuxでのgccや windowsでのcygwin環境に おけるgccだったり、無償のwindows用のbccだったり、VC++だったり どのプラットホームでどのコンパイラを使えばいいか、分かりません。 実際に会社などではフリーのコンパイラで製作してる場合もあるよ! とかいった具合なのでしょうか? 自分は個人的にvine linux3.2とwindows xp professionalを使用しているんですが、linuxのgcc環境でいくら勉強しても、それでwindows用のアプリケーションは作れないよ?とかあるんでしょうか? それとも、普通は最初に作りたいものが先きに決まっていて、それを 作るためには、このOSでこのコンパイラの組み合わせの環境じゃないといけないとかあるんでしょうか? 作りたいものと、コンパイラや環境選びの基準がいまいち分からないので、現場で製作をしておられる方や、プログラミングに詳しい方が いましたら是非、ご教授よろしくお願い致します。

  • long long型について

    以前、下記質問をさせてもらいました。 http://okwave.jp/qa3407843.html 回答して頂いた内容では、 コンパイラによって利用可能、不可能とのことですが、 コンパイラの種類とはどう確認すればよいのでしょうか? ※無知で申し訳ありません。 また32ビットOS、64ビットOSとかはまったく関係ないのでしょうか? 以上、よろしく御願い致します。

  • 64ビットと32ビットの違い

    C言語を使っているのですが、32ビット版のgccでコンパイルして実行できるファイルが、64ビット版のgccだと違う結果が出てきます。どちらのgccでも使える汎用性のあるファイルは書けないのでしょうか? 因みにstdio.h、math.h、stdlib.hのライブラリを使っていて、倍精度(double)と整数(int)を使っています。配列は宣言時に「*a」とでも宣言して、mallocで作っています。 漠然とした質問ですがよろしくお願いします。

  • フリーコンパイラgccって?

    (1)gccはlinux用のコンパイラですか? (2)gccはunix用のコンパイラですか? (3)gccでx-widowプログラムを作ることはできますか? (4)gccを入手するにはどうしたらいいのですか? (5)gccの特長を教えてください (6)gccでどのようなプログラムを作りましたか? どれか一つでも分かれば教えてください よろしくお願いします

  • 128ビットの浮動小数点型

    だれかUNIXのgcc上での128ビットlong doubleの内部記録方式を調べた方いらっしゃいませんか? 仮数部に何ビットとか。

  • SPARC3はホントに64bitで動いてる?

    SUNのSPARC3は64ビットのCPUらしいのですが次のプログラムを動かした ところなんだかホントかどうか疑わしくなりました。 #define T long long main() { const int N=100; T a[N],b[N]; for(int i=0;i<N;i++) { a[i]=i; b[i]=i; } b[N-1]=0; T *x,*y; for(int i=0;i<10000000;i++) for(x=a,y=b;*x==*y;x++,y++); } このプログラムを走らせたところTがintの時とlonglongのときでは 実行時間が倍近く違いました。(int 5.4秒、long long 9.5秒) SPARC3が64ビットをネイティブで計算できるならintとlonglongでは これほどの差は出ないと思うのですが。コンパイラはgccを使っているのですが そのせいでしょうか。OSはソラリスです。

  • ARMについて

    ARMを買ったときにWEBカメラモジュールつきの開発基盤を買ったんですけど、すでにコンパイラ済みで、そのままmakeすればWEBカメラを動かせるのはいいんですが、それでは意味がないと教師に言われ、そのカメラを別のマイコンに移植すると言う実験をしています そこで問題なのですが,すでにARM-Linux-gccでコンパイラ済みのプログラムを普通のgccに戻す手段はありませんか? またはARMを使ってgccにリンクするとか? コンパイラ済みのARM-Linux-gccを何らかの方法でgccに変えるとか? もし知っている人がいたら教えてください お願いします

  • 偶数ビットだけと奇数ビットだけを取り出すプログラム

    Red Hat Linux 9を使用して、C言語のプログラミングをしているのですが、分からないことがありますので質問させて頂きます。 1010101010101010101010101010101010101010101010101010101010101010 上記のような64ビットの値があり、このうち奇数ビットだけと偶数ビットだけを取り出したいと思います。それぞれ32ビットの値になります。 11111111111111111111111111111111 00000000000000000000000000000000 いろいろ考えてみたのですが、アイディアが思い浮かばず困っております。どなたか分かる方アドバイスをよろしくお願い致します。