期待できない long long int型
C99から、64bitの情報を格納できるlong long int
型とunsigned long long int
型が追加されました。long long int
は、long long
とint
を省略して宣言することができます。
ただし、64bit環境だとlong int
型と同じバイト数になるので、あまり恩恵が受けられません。
『Cクイックリファレンス』22頁
sizeof
演算子とlimits.h
のマクロで、サイズと値の確認してみます。
#include <stdio.h>
#include <limits.h>
int main(void)
{
printf("int : %d byte\n", sizeof(int));
printf("long : %ld byte\n", sizeof(long));
printf("long long : %lld byte\n", sizeof(long long));
printf("unsigned long long: %llu byte\n",
sizeof(unsigned long long));
putc('\n', stdout);
printf("INT_MAX : %d\n", INT_MAX);
printf("LONG_MAX : %ld\n", LONG_MAX);
printf("LLONG_MAX : %lld\n", LLONG_MAX);
printf("ULLONG_MAX: %llu\n", ULLONG_MAX);
return 0;
}
$ ./a.out
int : 4 byte
long : 8 byte
long long : 8 byte
unsigned long long: 8 byte
INT_MAX : 2147483647
LONG_MAX : 9223372036854775807
LLONG_MAX : 9223372036854775807
ULLONG_MAX: 18446744073709551615
実行環境が64bitだったので、long long int
は、long int
型と同じサイズ、値になりました。