Table of Contents
1 如何获取最大值
1.1 C++14的方法
std::cout << "int\t" << std::numeric_limits<int>::lowest() << ‘\t‘ << std::numeric_limits<int>::max() << ‘\n‘;
输出结果为:
int -2147483648 2147483647
1.2 如何自己实现最大值
int max_int = (int)((unsigned)~0 >> 1); cout << max_int << endl;
输出结果为:
2147483647
结果是一样的. 这行代码需要解读:
- ~0 是取反, 所有位都设置为1
- (unsigned)转型是把左起第一位解读为无符号位,为下一步右移做准备
- >> 1 是右移一位(除以2), 因为是unsigned类型整数, 所以左边补0
- 再将结果转换成目标类型int, 因为没有溢出,所以肯定可以
1.3 如何自己实现最小值
int min = -(int)((unsigned)~0 >> 1) - 1;
只是在已经算出的最大值的基础上加上符号, 并减一.