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