C++11 引入 <limits>,提供 std::numeric_limits<T>::max() 和 ::lowest()(C++11 為 ::min(),C++14 改為 ::lowest() 表示最小有限值)。
#include
#include
int main() {
std::cout << "int\t" << std::numeric_limits::lowest()
<< '\t' << std::numeric_limits::max() << '\n';
// 輸出: int -2147483648 2147483647
}
利用無符號整數的位運算:
int max_int = (int)((unsigned)~0 >> 1);
std::cout << max_int << std::endl; // 2147483647
原理解析:
~0:所有位取反,得到全 1 的位模式。(unsigned):轉為無符號,使最高位視為數值位而非符號位。>> 1:右移一位,最高位補 0,相當於除以 2,得到最大正整數。int,無溢出。在最大值基礎上取反並減一:
int min_int = -(int)((unsigned)~0 >> 1) - 1;
// 即 -2147483648
因為有符號整數通常採用補碼表示,最小值 = -(最大值) - 1。