一 极值
可以使用 std::numeric_limits 获取各种算术类型的最大最小值,头文件 <limits>
定义于头文件 <limits>
template< class T > class numeric_limits;
numeric_limits 类模板提供查询各种算术类型属性的标准化方式。
通过 numeric_limits 模板的特化提供此信息。标准库为所有算术类型制定可用的特化:
template<> class numeric_limits<bool>;
template<> class numeric_limits<char>;
template<> class numeric_limits<signed char>;
template<> class numeric_limits<unsigned char>;
template<> class numeric_limits<wchar_t>;
template<> class numeric_limits<char8_t>; // C++20 特性
template<> class numeric_limits<char16_t>; // C++11 特性
template<> class numeric_limits<char32_t>; // C++11 特性
template<> class numeric_limits<short>;
template<> class numeric_limits<unsigned short>;
template<> class numeric_limits<int>;
template<> class numeric_limits<unsigned int>;
template<> class numeric_limits<long>;
template<> class numeric_limits<unsigned long>;
template<> class numeric_limits<long long>;
template<> class numeric_limits<unsigned long long>;
template<> class numeric_limits<float>;
template<> class numeric_limits<double>;
template<> class numeric_limits<long double>;
二 计算机表示方法
先看Demo
#include <cstdint>
#include <iostream>
#include <limits>
#include <bitset>
int main() {
char max = std::numeric_limits<char>::max();
char min = std::numeric_limits<char>::min();
std::cout << "char max : " << int(max) << " " << std::bitset<8>(max) << std::endl;
std::cout << "char min : " << int(min) << " " << std::bitset<8>(min) << std::endl;
std::cout << "0 : " << std::bitset<8>(0) << std::endl;
std::cout << "-1 : " << std::bitset<8>(-1) << std::endl;
std::cin.get();
return 0;
}
结果:
char max : 127 01111111
char min : -128 10000000
0 : 00000000
-1 : 11111111
说明:(int8_t为例说明)
1. char类型(int8_t)的取值范围为: -128 ~ 127, 共计 2 ^ 8 = 256个。
2. 数值在计算机底层以二进制存储。
3. 原码反码补码是为了辅助说明数值在计算机中的表示方法。不必过于纠结于原码反码补码。
原码:最基本的二进制表示法。最高位为符号位,正数最高位为0, 负数最高位为1。其他位存放该数值的绝对值。
原码举例:
1原码:0 000 0001
-1原码:1 000 0001
反码:正数的反码 = 原码; 负数的反码 = 原码除符号位外取反。
反码举例:
1反码:0 000 0001
-1反码:1 111 1110
补码:正数的补码 = 原码; 负数的补码 = 反码 + 1。
补码举例:
1补码:0 000 0001
-1补码:1 111 1111 (例子结果)
正数以原码表示;负数以补码表示。
4. 特殊注意
0就别套概念了,全部位均是0;
最小值-128 : 1000 0000 怎么表示出来的?不需计算,这是规定, 最高位为1, 其他位全0。
三 参考