天天看點

擷取整數的最大值最小值

c/c++常需要獲得最大值,最小值,通常這兩個數與平台和作業系統有關,是以可移植的辦法就是推薦使用庫函數提供的常量定義

1. 利用語言自定義

類似的常量定義在limits.h和float.h頭檔案中。在頭檔案中,整數的最值通常是這樣的名字:INT_MAX, INT_MIN,直接使用即可。

2. 自定義變量

int MAX_INT = ((unsigned)(-1))>>1;
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(有符号的)