数据精度以及定义:
类型 字节数 范围 2进制位数 输入输出
int 4 -2 e9~2e9 2^31 %d %o %x
unsigned int 4 0~4e9 2^32 %u
short 2 -32768~32768 2^15 %hd %ho %hx
unsigned short 2 0~2e9 2^16 %hu
long 4 -2 e9~2 e9 2^31 %ld %lo %lx
unsigned long 4 -2e9~2e9 2^31 %lu
float: 4 7位有效数字 +-10e38 %f
double : 8 15/16位有效数字 10e308 %lf
__int64 8 -9e18~9e18 2^63 %I64 %I64o %I64x
long long int 8 -9e18~9e18 2^63 %lld %llo %llx
unsign __int64 8 0~1e19 2^64
unsigned long longint 8 0~1e19 2^64 %I64u %llu
char 1 2^7 %c
unsigned char 1 2^8 %c
关于__int64和long long的用法:
(1)VC
定义:
在VC里面,因为基于C89和C98,所以只有__int64被识别,
用法:__int64 a;
输入输出:
"%I64d"和"%I64u"则是Microsoft VC++库里用于输入输出__int64类型的格式说明。
定义:
在dev c++里面,就支持__int64和long long,
用法:__int64 a;
long long int a;
输入输出:
但是由于他是基于Mingw32的,所以输入输出只能用%I64d,他并不支持%lld
(3)OJ上的处理
"%lld"和"%llu"是linux下gcc/g++用于long long int类型(64 bits)输入输出的格式符。
总结:
做ACM时,OJ测试系统由于是在linux上提交,所以只能用long long a;
输入输出只能用%lld,%llu;
(输入时切记用%lld,不能用%d)
VC上编译器上,定义只能用__int64 a;
输入输出则用%I64d"和"%I64u;
dev c++编译器上,定义可用__int64和long long;
输入输出则只支持__int64;