C++14整数最大/小值

Table of Contents

  • 1. 如何获取最大值
    • 1.1. C++14的方法
    • 1.2. 如何自己实现最大值
    • 1.3. 如何自己实现最小值

1 如何获取最大值

1.1 C++14的方法

std::cout << "int\t"
  << std::numeric_limits::lowest() << '\t'
  << std::numeric_limits::max() << '\n';

输出结果为:

int	-2147483648	2147483647

1.2 如何自己实现最大值

int max_int = (int)((unsigned)~0 >> 1);
cout << max_int << endl;

输出结果为:

2147483647

结果是一样的. 这行代码需要解读:

  • ~0 是取反, 所有位都设置为1
  • (unsigned)转型是把左起第一位解读为数值位(符号位为0,但是不显示),为下一步右移做准备
  • >> 1 是右移一位(除以2), 因为是unsigned类型整数, 所以左边补符号位0
  • 再将结果转换成目标类型int, 因为没有溢出,所以肯定可以

1.3 如何自己实现最小值

int min = -(int)((unsigned)~0 >> 1) - 1;

只是在已经算出的最大值的基础上加上负号, 并减一.

Author: dean

Created: 2016-01-14 四 19:04

Validate


你可能感兴趣的:(#,c++,14,数据结构和算法)