64ビット環境での変数の宣言

変数の宣言を以下にまとめておきます。(VSのヘルプでは情報が分散しており、ちょっと見るときに不便なので。)

■整数
(本記事の初稿は2004年です。64ビットが当たり前の現在でも有用と思われるので、そのままの内容で公開します。)以下の記載はすべてVS2005でのものです。ANSIに準拠しているとは限らないので、gccなどを使う人は注意してください。(Size Prefixなるものがあることが最初わからなかった)Win64のVC/VC++では、intやlongは32ビットのままですのでご注意を。_int64やunsigned _int64はWin32のVC/VC++でも使えます。(32ビットのレジスタを使うことになりますが。)

変数宣言時の型名(Data Type Name)
char          :符号有り8ビット整数
unsigned char :符号なし8ビット整数

定数(Limits on Integer Constants)
CHAR_MIN= -128
CHAR_MAX=  127
UCHAR_MAX= 255

変数宣言時の型名(Data Type Name)
short          :符号有り16ビット整数
unsigned short :符号なし16ビット整数

定数(Limits on Integer Constants)
SHRT_MIN= -32768
SHRT_MAX=  32767
USHRT_MAX= 65535

変数宣言時の型名(Data Type Name)
int           :符号有り32ビット整数
unsigned int  :符号なし32ビット整数
long          :符号有り32ビット整数
unsigned long :符号なし32ビット整数

定数(Limits on Integer Constants)
INT_MIN=  –2147483648
INT_MAX=   2147483647
UINT_MAX=  4294967295
LONG_MIN= –2147483648
LONG_MAX=  2147483647
ULONG_MAX= 4294967295

変数宣言時の型名(Data Type Name)
_int64           :符号有り64ビット整数
unsigned _int64  :符号なし64ビット整数
long long        :符号有り64ビット整数

定数(Limits on Integer Constants)
_I64_MIN=  -9223372036854775808
_I64_MAX=   9223372036854775807
_UI64_MAX= 18446744073709551615

変数宣言時の型名(Data Type Name)
_size_t    アーキテクチャー上最大の符号有り整数
_ssize_t   アーキテクチャー上最大の符号なし整数

変数宣言時の型名(Data Type Name)
_m64    MMXの64ビット長レジスタ
_m128  :SSE/SSE2/SSE3の128ビット長レジスタ

%[flags] [width] [.precision] [{h | l | ll | I | I32 | I64}]type

flags:説明省略
width:説明省略
.precison:説明省略

Size Prefixes for printf and wprintf Format-Type Specifiers:
 h:   short, unsigned short
 l:   long,  unsigned long
 ll:  long long
 I32: _int32, unsigned _int32
 I64: _int64, unsigned _int64

type:(printf Type Field Characters)
 d: 符号有り10進数
 i: 符号有り10進数
 o: 符号なし8進数
 u: 符号なし10進数
 x: 符号なし16進数(abcdef)
 X: 符号なし16進数(ABCDEF)


例:
_int64 num64;
unsigned _int64 unum64;

..

printf("%I64d  %I64u", num64, unum64)

以下のデータ型は言語仕様としてのものではなく、Windowsのデータ型です。
Windows APIを使う時のためにメモしておきます。

CHAR      符号有り 8ビット整数
UCHAR     符号なし 8ビット整数
SHORT     符号有り16ビット整数
USHORT    符号なし16ビット整数
INT       符号有り32ビット整数
UINT      符号なし32ビット整数
LONG      符号有り32ビット整数
ULONG     符号なし32ビット整数
LONGLONG  符号有り64ビット整数
ULONGLONG 符号なし64ビット整数
DWORD32   符号なし32ビット整数
DWORD64   符号なし64ビット整数
INT32     符号有り32ビット整数
INT64     符号有り64ビット整数
LONG32    符号有り32ビット整数
LONG64    符号有り64ビット整数
UINT32    符号なし32ビット整数
UINT64    符号なし64ビット整数
ULONG32   符号なし32ビット整数
ULONG64   符号なし64ビット整数

64ビット整数を扱うためのWin32 APIです。

LONGLONG Int32x32To64(
  LONG Multiplier,
  LONG Multiplicand
);

ULONGLONG UInt32x32To64(
  DWORD Multiplier,
  DWORD Multiplicand
);

ULONGLONG Int64ShllMod32(
  ULONGLONG Value,
  DWORD ShiftCount
);

LONGLONG Int64ShraMod32(
  LONGLONG Value,
  DWORD ShiftCount
);

ULONGLONG Int64ShrlMod32(
  ULONGLONG Value,
  DWORD ShiftCount
);

int MulDiv(
  int nNumber,
  int nNumerator,
  int nDenominator
);

LARGE_INTEGER  64ビット長整数(符号有り)を格納する構造体
ULARGE_INTEGER 64ビット長整数(符号なし)を格納する構造体

■ポインタ

Win64では、ポインタはすべて64ビット長です。(void *は64ビット長)以下のデータ型は言語仕様としてのものではなく、Windowsのデータ型です。

DWORD_PTR
INT_PTR
UINT_PTR
LONG_PTR
ULONG_PTR
SIZE_T
SSIZE_T
HALF_PTR
UHALF_PTR
POINTER_32
POINTER_64

LPCVOID
LPDWORD
LPINT
LPLONG
LPVOID
LPWORD

PDWORD
PINT
PLONG
PUSHORT
PVOID
PWORD

起草日:2004年9月25日(土)(www.marbacka.net内の別のサイトで公開)
最終更新日:2017年2月19日(日)

スポンサーリンク
error: Content is protected !!