
No.3ベストアンサー
- 回答日時:
★『64Bit』の整数について
・『Java』言語では 64 ビット整数を正式にサポートしていますが、C 言語では処理系依存になります。
・『VC6』にはあまり詳しくありませんが、『long long』はマイクロソフト社系では使えません。
その代わりに、妙な型が定義されていて『__int64』、『LONGLONG』、『LARGE_INTEGER』など3つほど
64ビット整数を扱うような型が存在します。
●LARGE_INTEGER 共用体
typedef union union {
struct {
DWORD LowPart; // 飼い32ビット整数(符号なし)
LONG HighPart; // 上位32ビット整数(符号付き)
};
LONGLONG QuadPart; // 64ビット整数(符号付き)
} LARGE_INTEGER, *PLARGE_INTEGER;
●関数
LONGLONG Int32x32To64( LONG a, LONG b ); // 掛け算(a×b=64ビットの符号付き整数を返す)
ULONGLONG UInt32x32To64( DWORD a, DWORD b ); // 掛け算(a×b=64ビットの符号なし整数を返す)
ULONGLONG Int64ShllMod32( ULONGLONG a, DWORD shift ); // 論理左シフト(a << shift の符号なし整数を返す)
ULONGLONG Int64ShrlMod32( ULONGLONG a, DWORD shift ); // 論理右シフト(a >> shift の符号なし整数を返す)
LONGLONG Int64ShraMod32( ULONGLONG a, DWORD shift ); // 算術右シフト(a >> shift の符号付き整数を返す)
最後に:
・詳しい関数の内容は、MSDN のマニュアルを見て下さい。
・また、上記で紹介した共用体と関数は『Microsoft Visual Studio .NET 2003 C/C++』です。
・最初に紹介した『__int64』は『_』『_』『int64』です。『_』が2つ先頭に付きます。
・以上。おわり。
No.5
- 回答日時:
すでに long longはVC6では使えないことは書かれていますが、
C99ではlong long はサポートすべき型の中にありますから、
C99をサポートしていると謳っている処理系ならば処理系依存ということはありません。
Visual Studio 2005のVC(VC8)ならばlong longが使えます。
C++ Reference Guide > A Tour of C99
http://www.informit.com/guides/content.asp?g=cpl …
x64で本格化する64ビットWindowsの時代(5):ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20051 …
STLでも問題続出ですし、VC6でなければならない理由がないのなら
早めに移行することをお勧めします。
No.4
- 回答日時:
long long型は、元々はGCCなどが共通の拡張としてサポートしていた型ですが、C99からは標準でサポートされるようになりました。
C++の場合は、現時点では非標準ですが、次期改定時には標準に取り込まれることでしょう。Visual C++に関してですが、long long型がサポートされるのはVisual C++.NET 2003からです。したがって、残念ながらVisual C++ 6.0ではサポートされていません。どうしても使いたいのであれば、__int64に置き換えるしかないわけですが、できれば__int64を直接使わず、typedefで何らかの別名を付けた方がよいでしょう。将来的な互換性を考えると、<stdint.h>または<cstdint>を自作して、std::tr1::int_least64_tを使うのも一つの手です。
No.1
- 回答日時:
long longは元々ANSI C標準じゃないから対応できないコンパイラもある。
(C99には入ったのかな?)VCだと__int64が使えるんじゃないかな。
# 詳細はヘルプで確認して
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数のスコープ
-
関数の実体定義にヘッダファイ...
-
long型の定数の末尾にLを付ける...
-
VB6から参照可能なDLLの作成
-
intとINTの違いは?
-
DDVによるメッセージの変更
-
C++/CLIでネイティブの構造体を...
-
直接アドレス指定のポインタの...
-
2重定義って??
-
構造体の要素すべてに対する四...
-
DWORDの実際の型は何でしょうか
-
C++でboolにintの値を代入する...
-
main.c:7:43: warning: implici...
-
C++のfor文について
-
C言語のreturnの使い方
-
C言語のコンパイルエラー
-
visualstudio C# テキストボッ...
-
typedef enumの使い方を教えて...
-
手続き型と関数型について。
-
C++ クラスをメンバにもつクラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
main.c:7:43: warning: implici...
-
intとINTの違いは?
-
C++のfor文について
-
2重定義って??
-
void func( void )について
-
変数の型を定義しなかった場合...
-
C言語のコンパイルエラー
-
C++でboolにintの値を代入する...
-
ハンドルされていない例外が発...
-
構造体の要素すべてに対する四...
-
構造体の宣言でエラーが出ます。
-
プログラムの中で別のmainを呼...
-
[C++]メンバ関数の仮引数について
-
0除算を判定したい
-
プログラム、どのように書いて...
-
typedef enumの使い方を教えて...
-
enumについて
おすすめ情報