从C++11 开始,标准库在头文件<limits> 里提供了std::numeric_limits 工具,可以获取各种数值类型的参数。
对于整数类型T
- 最大值:
std::numeric_limits<T>::max() - 最小值:
std::numeric_limits<T>::min() - 是否为有符号类型:
std::numeric_limits<T>::is_signed - 二进制最大长度:
std::numeric_limits<T>::digits - 十进制最大长度:
std::numeric_limits<T>::digits10 + 1
对于有符号整数,std::numeric_limits<T>::digits 不包含符号位,所以int 的长度会比unsigned 小。
std::numeric_limits<T>::digits10 返回的是10 的幂,比如T 类型的最大值是maxmaxmax,max=n×10jmax = n × 10^jmax=n×10j,digits10 就是jjj。或者说digits10 就是log10(max)log_{10}(max)log10(max) 再向下取整。对于uint8_t 类型,最大255,digits10 == 2。