目录
一、前言
二、什么是 INT_MAX 和 INT_MIN ?
三、INT_MAX 和 INT_MIN 的用途
四、如何避免溢出问题出现 ?
五、 INT_MAX 和 INT_MIN 的运算
六、leetcode 常考面试题
七、共勉
一、前言
大家在平时刷 leetcode 的时候,肯定会碰到 溢出问题 ,之后查看题解,大部分题解都会通过 INT_MAX 和 INT_MIN 来进行解决。那么为了弄清楚什么是 INT_MAX 和 INT_MIN ,我们收集了一些资料,总结如下哦!!
二、什么是 INT_MAX 和 INT_MIN ?
INT_MAX 和 INT_MIN 是 C++ 的两个预定义宏,代表了整型变量能够存储的最大正整数和最小负整数,分别为 2147483647 和 -2147483648。这两个宏在头文件 <climits> 中定义。
INT_MAX 表示一个 32 位符号整数所能够表示的最大值,也就是 2^31 − 1。而 INT_MIN 则表示最小的负整数。这个值是相对于二进制补码表示法的,也就是说,负数的范围比正数大 1。
代码示例:
#include <iostream>#include <climits>using namespace std;int main() { int max_int = INT_MAX; int min_int = INT_MIN; cout << "The maximum value that can be stored in an int variable is: " << max_int << endl; // 2147483647 cout << "The minimum value that can be stored in an int variable is: " << min_int << endl; // -2147483648 return 0;}
【注意】:这些宏仅适用于 32 位整型变量,如果使用 64 位整型变量,需要使用其他预定义宏,如
LONG_LONG_MAX
和LONG_LONG_MIN
,代表能够存储的最大/最小长整数。
三、INT_MAX 和 INT_MIN 的用途
INT_MAX
是个很大的数,如果想得到数组中最小值,可以先将min1
(下方代码中的一个变量)设成INX_MAX
,这样就不需要const int
定义一个很大的数了:
int min1 = INT_MAX;for(int i = 0; i < n; i++){if(arr[i] < min1){min1 = arr[i];}}
四、如何避免溢出问题出现 ?
【C/C++】中常量 INT_MAX 和 INT_MIN 分别表示最大、最小整数 。 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 的运算
最轻微的上溢是C/C++ 语言中
int
类型是 32 位的,范围是 -2147483648 到 2147483647 。
INT_MAX + 1
,结果是 INT_MIN
。最严重的上溢是 INT_MAX + INT_MAX
,结果是 -2。最轻微的下溢是 INT_MIN - 1
,结果是是 INT_MAX
。最严重的下溢是 INT_MIN + INT_MIN
,结果是 0 。 六、leetcode 常考面试题
题目:整数反转
链接:整数反转
class Solution {public: int reverse(int x) { // to_string 函数的主要作用是将 整形 转换为 字符串 string s = to_string(x); int l = 0; // 考虑 负数 if(s[l]=='-') { l++; } // 将 数据部分 进行反转 std::reverse(s.begin()+l,s.end()); // INT_MAX 和 INT_MIN 是C++内置的常量 const int k1 = INT_MAX,k2 = INT_MIN; string t1 = to_string(k1),t2 = to_string(k2); if(s[0]=='-') { if(s.size()==t2.size() && s > t2) { return 0; } } else { if(s.size()==t1.size() && s > t1) { return 0; } } // stoi() 将字符串转换为 整形 x = stoi(s); return x; }};
七、共勉
以下就是我对 详解 INT_MAX 和 INT_MIN 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++ vector 类的理解,请持续关注我哦!!!