C++ 中的INT_MAX,INT_MIN數值大小操作
int占4字節32位,根據二進制編碼的規則,
INT_MAX = 2^31-1=2147483647
INT_MIN= -2^31=-2147483648
C/C++中,所有超過該限值的數,都會出現溢出,出現warning,但是並不會出現error。
如果想表示的整數超過瞭該限值,可以使用長整型long long 占8字節64位。
補充:C++ 數值最大最小標識符一網打盡,INT_MIN/ INT_MAX/LONG_MIN/LONG_MAX 等等
我就廢話不多說瞭,大傢還是直接看代碼吧~
Constant | Meaning | Value |
---|---|---|
CHAR_BIT | Number of bits in the smallest variable that is not a bit field. | 8 |
SCHAR_MIN | Minimum value for a variable of type signed char. | -128 |
SCHAR_MAX | Maximum value for a variable of type signed char. | 127 |
UCHAR_MAX | Maximum value for a variable of type unsigned char. | 255 (0xff) |
CHAR_MIN | Minimum value for a variable of type char. | -128; 0 if /J option used |
CHAR_MAX | Maximum value for a variable of type char. | 127; 255 if /J option used |
MB_LEN_MAX | Maximum number of bytes in a multicharacter constant. | 5 |
SHRT_MIN | Minimum value for a variable of type short. | -32768 |
SHRT_MAX | Maximum value for a variable of type short. | 32767 |
USHRT_MAX | Maximum value for a variable of type unsigned short. | 65535 (0xffff) |
INT_MIN | Minimum value for a variable of type int. | -2147483647 – 1 |
INT_MAX | Maximum value for a variable of type int. | 2147483647 |
UINT_MAX | Maximum value for a variable of type unsigned int. | 4294967295 (0xffffffff) |
LONG_MIN | Minimum value for a variable of type long. | -2147483647 – 1 |
LONG_MAX | Maximum value for a variable of type long. | 2147483647 |
ULONG_MAX | Maximum value for a variable of type unsigned long. | 4294967295 (0xffffffff) |
LLONG_MIN | Minimum value for a variable of type long long. | -9,223,372,036,854,775,807 – 1 |
LLONG_MAX | Maximum value for a variable of type long long. | 9,223,372,036,854,775,807 |
ULLONG_MAX | Maximum value for a variable of type unsigned long long. | 18,446,744,073,709,551,615 (0xffffffffffffffff) |
補充:c++中short的最小值SHRT_MIN減1不是SHRT_MAX的原因
最近在看一本一直都想看的書,c++ primer plus,本來想看的是c++ primer,結果買錯瞭,反正都差不多。
在學習short,int,long的時候,看到書中這樣寫到:整型變量的行為就像裡程表。如果超越瞭限制,其值將為范圍另一端的取值。這句話我是這樣理解的,假如我們設置瞭一個int型的整數,例如 int n_int = INT_MAX; 那麼,我們做 n_int+1時輸出應為 INT_MIN。結果的確是這樣。但是short的有點特別,雖然不常見。
下面看一段程序:
int c_char = CHAR_BIT; int n_int = INT_MIN; short n_short = SHRT_MIN; long n_long = LONG_MAX; long long n_llong = LLONG_MAX; cout<< sizeof n_int<<" "<<sizeof n_short<<" "<<sizeof(n_short - 1)<<" "<<sizeof(n_long)<<" "<<sizeof(n_llong)<<endl; cout<<n_int - 1<<" "<< n_short - 1 <<" "<<n_long<<" "<<n_llong<<" "<<c_char<<endl; //n_short是short類型的最小值,理論上減1應為SHRT_MAX的值,但結果不是
下面是程序結果:
解釋:
程序中定義瞭n_int為int型的最小值,我們輸出n_int-1時發現結果是int的最大值INT_MAX。結果第二行第一個數。但是在程序的第四行我們定義瞭一個n_short,賦值SHRT_MIN,然後輸出n_short – 1,理論上說結果應該為32767,也就是SHRT_MAX。但是結果不一樣,那麼結果為什麼會這樣呢?
我們可以看輸出中的第一行,此行輸出的是各個數值在計算機中占的字節數。在輸出sizeof(n_short – 1)時,結果是4,也就是數n_short – 1現在是一個整型數。在c++中規定short是兩個字節,也就是16位。但是在計算機中,short存儲占4個字節,因此,在short超出范圍的時候會自動轉換成整型的數。
這裡額外在說一點,c++中基本整型有5種:char、short、int、long、long long(c++11中)。這裡註意,char是基本整型。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。