C/C++标准库中定义的各个类型最大值最小值limit.h

本文介绍了不同数据类型在C/C++中的最大存储值,包括char、short int、int、long long int等,并说明了如何通过预定义常量获取这些值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  编程中,我们一般需要考虑各个数据类型能够存储的最大值。虽然我们知道例如char是1个字节,short int是2个字节,能够推倒出对应的最大值,但是这种累活实际上标准库早就通过预定义方式事先定义了,我们直接调用如INT_MAX常量符就行。这些预定义是记录在limit.h头文件中,下面罗列一些常用预定义:

//单字节 char和unsigned char类型
#define SCHAR_MIN   (-128)      /* minimum signed char value */
#define SCHAR_MAX     127       /* maximum signed char value */
#define UCHAR_MAX     0xff      /* maximum unsigned char value */

//双字节 short int和unsigned short类型
#define SHRT_MIN    (-32768)        /* minimum (signed) short value */
#define SHRT_MAX      32767         /* maximum (signed) short value */
#define USHRT_MAX     0xffff        /* maximum unsigned short value */

//4字节 int和unsigned int类型
#define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */
#define INT_MAX       2147483647    /* maximum (signed) int value */
#define UINT_MAX      0xffffffff    /* maximum unsigned int value */

#define LONG_MIN    (-2147483647L - 1) /* minimum (signed) long value */
#define LONG_MAX      2147483647L   /* maximum (signed) long value */
#define ULONG_MAX     0xffffffffUL  /* maximum unsigned long value */

//8字节 long long int和unsigned long long int类型
#define LLONG_MAX     9223372036854775807i64       /* maximum signed long long int value */
#define LLONG_MIN   (-9223372036854775807i64 - 1)  /* minimum signed long long int value */

  我们需要注意一下LONG_MIN和LONG_MAX,64位和32位定义的大小是不同的,上面是32位系统上预定义的long类型最大和最小存储数据值。
  所以一般情况下,如果需要存储8个字节大小的数据,使用long long int,这个无论32位系统还是64位系统都是8个字节。
  另外我需要多提一句,stdlib.h头文件中预定义的随机数最大值,RAND_MAX是0x7fff,这个预定义在随机数中调用会经常用到。

### C++ 中实现最大最小值的方法 在 C++ 编程语言中,`std::min` 和 `std::max` 是标准模板库(STL)提供的功能,用于比较两个或多个数值并返回其中的较小值和较大值。这些函数位于头文件 `<algorithm>` 中。 #### 使用 `std::min` 和 `std::max` 以下是使用 `std::min` 和 `std::max` 的基本示例: ```cpp #include <iostream> #include <algorithm> // 包含 std::min 和 std::max int main() { int a = 10; int b = 20; int minValue = std::min(a, b); // 返回 a 和 b 中的较小值 int maxValue = std::max(a, b); // 返回 a 和 b 中的较大值 std::cout << "Min value: " << minValue << "\n"; std::cout << "Max value: " << maxValue << "\n"; return 0; } ``` 上述代码展示了如何通过调用 `std::min` 和 `std::max` 来分别找到两个整数中的最小值最大值[^1]。 #### 使用 `std::minmax` 自 C++11 起引入了 `std::minmax` 函数,它可以在单次遍历中同时计算一组数据的最小值最大值。这相较于单独调用 `std::min` 和 `std::max` 更高效,尤其是在处理大量数据时[^2]。 下面是一个使用 `std::minmax` 的例子: ```cpp #include <iostream> #include <algorithm> int main() { double c = 5.5; double d = 7.7; auto result = std::minmax(c, d); std::cout << "Min value: " << result.first << "\n"; // 输出较小值 std::cout << "Max value: " << result.second << "\n"; // 输出较大值 return 0; } ``` 在这个例子中,`std::minmax` 返回的是一个 `std::pair` 对象,其成员 `.first` 表示最小值而 `.second` 则表示最大值。 #### 处理 Windows 平台上的冲突问题 当在 Windows 系统上开发时可能会遇到一个问题:由于 Windows SDK 文件 (`WinDef.h`) 已经预定义了宏 `min` 和 `max`,它们会干扰到 STL 提供的标准版本。这种情况下可以通过将 `std::min` 或 `std::max` 放入圆括号来解决此问题[^3]。 修正后的代码片段如下所示: ```cpp #include <limits> #include <iostream> int main() { using namespace std; cout << "Minimum integer limit: " << (numeric_limits<int>::min)() << endl; cout << "Maximum integer limit: " << (numeric_limits<int>::max)() << endl; return 0; } ``` 这里 `(numeric_limits<int>::min)()` 和 `(numeric_limits<int>::max)()` 的额外括号防止了与 Windows 宏定义发生名称冲突。 ### 总结 - **`std::min`** 可以用来找出两个参数之间的更小者。 - **`std::max`** 用于寻找两者间的更大者。 -C++11 开始支持的 **`std::minmax`** 方法允许一次性得到一对输入中的极值对。 - 需要注意,在某些平台上可能存在的命名空间污染情况可通过适当的技术手段规避之。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值