C++ INT_MIN和INT_MAX

本文详细解释了C/C++中INT_MIN与INT_MAX的定义及其在不同情况下的运算结果,包括上溢和下溢的情况。同时介绍了如何通过标准头文件limits.h来获取这些值。

C++ INT_MIN和INT_MAX

在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。该表达式的意思是对整数21473648取负,但是2147483648已经溢出了int的上限,所以定义为(-INT_MAX -1)。

C中int类型是32位的,范围是-2147483648到2147483647 。
(1)最轻微的上溢是INT_MAX + 1 :结果是 INT_MIN;
(2)最严重的上溢是INT_MAX + INT_MAX :结果是-2;
(3)最轻微的下溢是INT_MIN - 1:结果是是INT_MAX;
(4)最严重的下溢是INT_MIN + INT_MIN:结果是0 。

INT_MIN与INT_MAX

在标准头文件limits.h中定义

#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX - 1)//这里没有简单地将INT_MIN赋值成-2147483647,是因为-2147483648对于编译器而言是个表达式,而2147483648对于32-bit整数是无法表示的,所以经过这个表达式的结果是未定义的。在GCC上直接写-2147483648后,编译器给出了警告,说结果是unsigned。
#include <iostream>
using namespace std;
int main() {
    // int -2147483648~2147483647    2^32
    cout << INT_MIN << endl;//-2147483648
    cout << INT_MAX << endl;//2147483647
    // unsigned int 4294967295        2^32
    cout << UINT32_MAX << endl;//4294967295
    // long long        9223372036854775807        2^64
    cout << LONG_LONG_MAX << endl;//9223372036854775807
    cout << LONG_LONG_MIN << endl;//-9223372036854775808
    // unsigned long long    18446744073709551615    2^64
    cout << UINT64_MAX << endl;//18446744073709551615
    return 0;
}
INT_MAX INT_MIN 是在C/C++编程中用于表示 int 类型所能存储的最大值最小值的常量。 ### 含义 因为 int 类型通常占 4 字节 32 位,根据二进制编码的规则,INT_MAX 的值为 $2^{31}-1$,INT_MIN 的值为 $-2^{31}$。在C/C++中,所有超过该限值的数,都会出现溢出,会有 warning 提示,但不会出现 error。如果想表示的整数超过了该限值,可以使用长整型 long long,其占 8 字节 64 位 [^2]。 ### 用途 INT_MAX INT_MIN 常用于初始化变量,以方便后续在数据比较中找到最小值或最大值。例如,若要在数组中找到最小值,可以先将一个变量初始化为 INT_MAX,然后遍历数组,若数组元素比该变量小,则更新该变量的值;同理,若要找最大值,可先将变量初始化为 INT_MIN,再遍历数组进行比较更新。示例代码如下: ```cpp #include <iostream> #include <climits> int main() { int a[] = {1, 3, 5, 2, 4}; int n = sizeof(a) / sizeof(a[0]); int min = INT_MAX; int max = INT_MIN; for (int i = 0; i < n; i++) { if (a[i] < min) { min = a[i]; } if (a[i] > max) { max = a[i]; } } std::cout << "Min: " << min << std::endl; std::cout << "Max: " << max << std::endl; return 0; } ``` 在上述代码中,通过将 `min` 初始化为 INT_MAX,`max` 初始化为 INT_MIN,在遍历数组 `a` 的过程中不断更新 `min` `max` 的值,最终得到数组中的最小值最大值 [^1]。 ### 相关知识 在某些情况下,也可以使用 `std::numeric_limits<int>::max()` `std::numeric_limits<int>::min()` 来获取 int 类型的最大值最小值,例如 `int minIndex = std::numeric_limits<int>::max();` 就是将 `minIndex` 初始化为编译器允许的 int 类型最大值 [^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值