获取整数的最大值最小值

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(有符号的)

 

posted @ 2014-01-22 16:32  jihite  阅读(1149)  评论(3编辑  收藏  举报