C++标准库 Numeric limits climits cfloat cstdint

本文深入探讨了C++标准库中的Numeric Limits模块,包括climits和cfloat头文件,详细阐述了它们在处理数值类型限制上的作用,如整型和浮点型的最大值、最小值等。同时,也介绍了cstdint头文件中定义的固定宽度整数类型,为开发者在进行数值计算和类型选择时提供指导。
该系列博文主要参考自 cppreference.com 和 cplusplus.com
由于博主水平有限,内容仅供参考

climits

该头文件中定义了许多宏

CHAR_BIT
一个byte的bit数

MB_LEN_MAX
一个多字节字符所占的最大字节数

CHAR_MIN, SCHAR_MIN, SHRT_MIN, INT_MIN, LONG_MIN, LLONG_MIN(c++11)
分别为char, signed char, short, int, long, long long类型的最小值

CHAR_MAX, SCHAR_MAX, SHRT_MAX, INT_MAX, LONG_MAX, LLONG_MAX(c++11), UCHAR_MAX, USHRT_MAX, UINT_MAX, ULONG_MAX, ULLONG_MAX(c++11)
分别为char, signed char, short, int, long, long long, unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long类型的最大值


cfloat

该头文件中也是许多宏

FLT_RADIX
三个(float, double 和 long double)浮点类型的底数

FLT_MIN, DBL_MIN, LDBL_MIN, FLT_MAX, DBL_MAX, LDBL_MAX
float, double 和 long double 类型的最小值和最大值

FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON
三中类型所能表示的大于1的最小值与1之间的差值

FLT_DIG, DBL_DIG, LDBL_DIG
在不丢失精度的情况下,这三种类型可以表示的小数位数

FLT_MANT_DIG, DBL_MANT_DIG, LDBL_MANT_DIG
在不丢失精度的情况下,这三种类型可以表示的以FLT_RADIX为底的位数

FLT_MIN_EXP, DBL_NIN_EXP, LDBL_MIN_EXP, FLT_MAX_EXP, DBL_MAX_EXP, LDBL_MAX_EXP
可以被表示的以FLT_RADIX为底数的指数,三种类型幂的最小值

FLT_MIN_10_EXP, DBL_NIN_10_EXP, LDBL_MIN_10_EXP, FLT_MAX_10_EXP, DBL_MAX_10_EXP, LDBL_MAX_10_EXP
可以被表示的以10为底数的指数,三种类型幂的最小值

FLT_ROUNDS
浮点运算的默认舍入模式

FLT_EVAL_METHOD(c++11)
指定浮点运算的精度

DECIMAL_DIG(c++11)
在不丢失精度的情况下,转换为long double 类型的小数位数



cstdint(c++11)

类型:

intmax_t
标准支持的能表示最大范围的整型

intptr_t
能容纳指针值的整型

int8_t, int16_t, int32_t, int64_t
分别表示8, 16, 32和64位的整型

int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t
分别表示最少为8, 16, 32和64位的整型,至少和其指定位数的整形一样快

int_least8_t, int_least16_t, int_least32_t, int_least64_t
分别表示至少为8, 16, 32和64位的整型

uintmax_t
标准支持的能表示最大范围的无符号整型

uintptr_t
能容纳指针值的无符号整型

uint8_t, uint16_t, uint32_t, uint64_t
分别表示8, 16, 32和64位的无符号整型

uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t
分别表示最少为8, 16, 32和64位的无符号整型,至少和其指定位数的整形一样快

uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t
分别表示至少为8, 16, 32和64位的无符号整型




INTMAX_MIN, INTMAX_MAX
intmax_t类型的最小值和最大值

INTPRT_MIN, INTPTR_MAX
intptr_t类型的最小值和最大值

INT8_MIN, INT8_MAX, INT16_MIN, INT16_MAX, INT32_MIN, INT32_MAX, INT64_MIN, INT64_MAX
分别表示int8_t, int16_t, int32_t, int64_t类型的最小值和最大值

INT_FAST8_MIN, INT_FAST8_MAX, INT_FAST16_MIN, INT_FAST16_MAX, INT_FAST32_MIN, INT_FAST32_MAX, INT_FAST64_MIN, INT_FAST64_MAX
分别表示int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t类型的最小值和最大值

INT_LEAST8_MIN, INT_LEAST8_MAX, INT_LEAST16_MIN, INT_LEAST16_MAX, INT_LEAST32_MIN, INT_LEAST32_MAX, INT_LEAST64_MIN, INT_LEAST64_MAX
分别表示int_least8_t, int_least16_t, int_least32_t, int_least64_t类型的最小值和最大值

UINTMAX_MAX
uintmax_t类型的最大值

UINTPRT_MAX
uintprt_t类型的最大值

UINT8_MAX, UINT16_MAX, UINT32_MAX, UINT64_MAX
分别表示uint8_t, uint16_t, uint32_t, uint64_t类型的最大值

UINT_FAST8_MAX, UINT_FAST16_MAX, UINT_FAST32_MAX, UINT_FAST64_MAX
分别表示uint8_t, uint16_t, uint32_t, uint64_t类型的最大值

UINT_LEAST8_MAX, UINT_LEAST16_MAX, UINT_LEAST32_MAX, UINT_LEAST64_MAX
分别表示uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t类型的最大值






当然可以!以下是 **C++ 标准库中所有标准头文件的完整列表**,你可以直接复制使用。这些头文件适用于符合 C++17 / C++20 标准的编译器(如 GCC、Clang、MSVC 等)。 --- ### ✅ C++ 所有标准库头文件(可复制粘贴) ```cpp #include <algorithm> #include <array> #include <atomic> #include <bitset> #include <cassert> #include <ccomplex> #include <cctype> #include <cerrno> #include <cfenv> #include <cfloat> #include <charconv> #include <chrono> #include <cinttypes> #include <climits> #include <clocale> #include <cmath> #include <complex> #include <concepts> #include <condition_variable> #include <csetjmp> #include <csignal> #include <cstdarg> #include <cstdbool> #include <cstddef> #include <cstdint> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctgmath> #include <thread> #include <ctime> #include <cuchar> #include <cwchar> #include <cwctype> #include <deque> #include <exception> #include <execution> #include <filesystem> #include <forward_list> #include <fstream> #include <functional> #include <future> #include <initializer_list> #include <iomanip> #include <ios> #include <iosfwd> #include <iostream> #include <istream> #include <iterator> #include <limits> #include <list> #include <locale> #include <map> #include <memory> #include <memory_resource> #include <mutex> #include <new> #include <numeric> #include <optional> #include <ostream> #include <queue> #include <random> #include <ranges> #include <ratio> #include <regex> #include <scoped_allocator> #include <set> #include <shared_mutex> #include <source_location> #include <sstream> #include <stack> #include <stdexcept> #include <streambuf> #include <string> #include <string_view> #include <strstream> #include <system_error> #include <tuple> #include <type_traits> #include <typeindex> #include <typeinfo> #include <unordered_map> #include <unordered_set> #include <utility> #include <valarray> #include <variant> #include <vector> #include <version> ``` --- ### 🔍 说明 | 类别 | 示例 | |------|------| | **C兼容头文件** | `<cctype>`, `<cmath>`, `<cstdio>` 等(替代 `ctype.h`) | | **容器** | `<vector>`, `<list>`, `<map>`, `<unordered_set>` | | **算法函数对象** | `<algorithm>`, `<functional>`, `<numeric>` | | **输入输出** | `<iostream>`, `<fstream>`, `<sstream>` | | **多线程支持** | `<thread>`, `<mutex>`, `<future>`, `<atomic>` | | **时间日期** | `<chrono>`, `<ctime>` | | **智能指针内存管理** | `<memory>`, `<new>` | | **异常处理** | `<exception>`, `<stdexcept>` | | **文件系统 (C++17)** | `<filesystem>` | | **概念 (C++20)** | `<concepts>`, `<ranges>` | > ⚠️ 注意: > - 使用 `<xxx>` 形式是 C++ 封装后的标准头文件。 > - 不要使用旧式 `<stdio.h>`,应改用 `<cstdio>`。 > - 并非所有编译器默认支持最新头文件(如 `<bit>`、`<span>`、`<expected>`(C++23)需开启 `-std=c++23` 且编译器支持)。 --- ### ✅ 推荐常用组合(实际开发中无需全包含) ```cpp #include <iostream> #include <vector> #include <algorithm> #include <cmath> #include <cstring> #include <string> #include <map> #include <set> #include <queue> #include <climits> using namespace std; ``` 这是竞赛或刷题中最常见的“万能头”简化版(虽然没有 `#include <bits/stdc++.h>`,但更标准、跨平台安全)。 --- ### ❗不推荐的做法 ```cpp // 非标准,仅GCC支持,不可移植 #include <bits/stdc++.h> ``` 如果你追求可移植性、标准化和清晰结构,请避免使用它。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值