根据平台的不同,需进行相关的测试,保证一致性。
有符号最大值和最小值:
#define MAX_INT ((unsigned)(-1)>>1)
#define MIN_INT (~MAX_INT)
无符号最大值:
#define MIN_UINT ((unsigned)(0))
#define MAX_UINT ((unsigned)(-1))
64位有符号最大值和最小值:
#define MAX_INT_64 ((unsigned long long)(-1)>>1)
#define MIN_INT_64 (~MAX_INT_64)
64位无符号最大值和最小值:
#define MAX_UINT_64 ((unsigned long long)(0))
#define MIN_UINT_64 ((unsigned long long)(-1))
测试代码:
#include <stdint.h>
#include <stdio.h>
#define MAX_INT ((unsigned)(-1)>>1)
#define MIN_INT (~MAX_INT)
#define MIN_UINT ((unsigned)(0))
#define MAX_UINT ((unsigned)(-1))
#define MAX_INT_64 ((unsigned long long)(-1)>>1)
#define MIN_INT_64 (~MAX_INT_64)
#define MAX_UINT_64 ((unsigned long long)(0))
#define MIN_UINT_64 ((unsigned long long)(-1))
int main(void)
{
printf("%ld\n",sizeof(MAX_INT));
printf("%ld\n",sizeof(MAX_INT_64));
printf("%ld\n",sizeof(MAX_UINT_64));
printf("%d\n",MAX_INT);
printf("%u\n",MAX_UINT);
printf("%d\n",MIN_INT);
printf("%lld\n",MAX_INT_64);
printf("%lld\n",MIN_INT_64);
printf("%llu\n",MAX_UINT_64);
printf("%llu\n",MIN_UINT_64);
return 0;
}
测试结果:
./a.out
4
8
8
2147483647
4294967295
-2147483648
9223372036854775807
-9223372036854775808
0
18446744073709551615