C整型上下限INT_MAX INT_MIN及其運算

介紹

C中常量INT_MAX和INT_MIN分別表示最大、最小整數,定義在頭文件limits.h中。

#include <limits.h> 
#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX - 1)

INT_MAX,INT_MIN數值大小

因爲int佔4字節32位,根據二進制編碼的規則,INT_MAX = 2^31-1,INT_MIN= -2^31.C/C++中,所有超過該限值的數,都會出現溢出,出現warning,但是並不會出現error。如果想表示的整數超過了該限值,可以使用長整型long long 佔8字節64位。

關於INT_MAX INT_MIN的運算

由於二進制編碼按原碼、補碼和反碼的規則進行運算,所有程序中對INT_MAX和INT_MIN的運算應當格外注意,在出現溢出的時候,不遵循數學規則。

INT_MAX + 1 = INT_MIN
INT_MIN - 1 = INT_MAX
abs(INT_MAX) = INT_MIN

比較有趣的是,INT_MAX + 1 < INT_MAX, INT_MIN - 1 > INT_MIN, abs(INT_MIN) < 0.

實例

#include <stdio.h>
#include <stdlib.h>
#include <limits.h> 
int main()
{ 
    printf("INT_MAX  = %d\n",INT_MAX);
    printf("INT_MIN  = %d\n",INT_MIN );
    if(INT_MAX + 1 < INT_MAX)
    {
    	 printf("INT_MAX + 1 < INT_MAX\n");
    }
    if(INT_MIN - 1 > INT_MIN)
    {
    	 printf("INT_MIN - 1 > INT_MIN\n");
    }
    if(abs(INT_MIN) < 0)
    {
    	 printf("abs(INT_MIN) < 0\n");
    }
     printf("abs(INT_MIN) %d \n",abs(INT_MIN));
    return 0;
}

輸出

INT_MAX  = 2147483647
INT_MIN  = -2147483648
INT_MAX + 1 < INT_MAX
INT_MIN - 1 > INT_MIN
abs(INT_MIN) < 0
abs(INT_MIN) 2147483648

參考資料

https://blog.csdn.net/u012604810/article/details/80290706

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章