C++数据类型的存储位数与上下范围

存储位数

数据类型 存储位数
int 32位补码,1位符号位,31位数值位
long long 64位补码,1位符号位,63位数值位
float IEEE单精度浮点数32位,1位符号位,8位阶码位(移码),23位尾数位(原码)
double IEEE双精度浮点数64位,1位符号位,11位阶码位(移码),52位尾数位(原码)
char 8位二进制数(1个字节)
bool 未定义

对于bool类型;存储位数没有定义,取决于编译器的实现;其他类型强制转换为bool时,0为false,非0为true。

上下范围

C++风格

数据类型 最小范围 最大范围 头文件
int numeric_limits::min() numeric_limits::max() <limits>
long long numeric_limits::min() numeric_limits::max() <limits>
数据类型 最小范围 最大范围 头文件
float -numeric_limits::max() numeric_limits::max() <limits>
double -numeric_limits::max() numeric_limits::max() <limits>

C风格

数据类型 最小范围 最大范围 头文件
int INT_MIN INT_MAX <climits>
long long LONG_LONG_MIN或LLONG_MIN LONG_LONG_MAX或LLONG_MAX <climits>
数据类型 最小范围 最大范围 头文件
float -FLT_MAX FLT_MAX <cfloat>
double -DBL_MAX DBL_MAX <cfloat>

对于浮点数来说,只能用标准库得到正数最小值、正数最大值,而负数最小值就是正数最大值的负数。也就是说,得到浮点数范围的方法是[正数最大值取负数, 正数最大值]

浮点数正数最小值是0,也就是说numeric_limits<float>::min()numeric_limits<double>::min()FLT_MINDBL_MIN4个量为0。