c/c++常需要获得最大值,最小值,通常这两个数与平台和操作系统有关,因此可移植的办法就是推荐使用库函数提供的常量定义
1. 利用语言自定义
类似的常量定义在limits.h和float.h头文件中。在头文件中,整数的最值通常是这样的名字:INT_MAX, INT_MIN,直接使用即可。
2. 自定义变量
int MAX_INT = ((unsigned)(-1))>>1;
int MIN_INT = ~MAX_INT;
解释
int占4个字节。-1是有符号数,默认用补码表示,二进制表示为32个1,如果强制解释为无符号数,那么
(unsigned)(-1)
=(11111111 11111111 11111111 11111111)2(无符号数)
=2^0+2^1+2^2+....+2^31
=2^32-1
=4294967295
那么右移一位
(unsigned)(-1)>>1
=(01111111 11111111 11111111 11111111)2(无符号数)
=2^31-1
=2147483647
程序例证
#include <iostream>
using namespace std;
int main()
{
int max_int = (unsigned)(-1) >> 1;
int min_int = ~max_int;
cout << (signed)(-1) << endl;
cout << (unsigned)(-1) << endl;
cout << max_int << "\t" << min_int << endl;
}
结果
注意
~(unsigned(-1) >> 1) = 2147483648(无符号的)
~max_int = 2147483648(有符号的)