当前位置: 首页 > news >正文

C++各数据类型的内存和范围

一、核心前提:类型大小的标准规则

C++标准仅规定最小字节数和取值范围下限,具体大小由编译器(如MSVC/GCC)、系统位数(32/64位)决定,以下是主流平台(x86/x64,GCC/MSVC)的通用值:

  • 字节换算:1字节 = 8位(bit),取值范围由位数决定(无符号:$0 \sim 2n-1$;有符号:$-2 \sim 2^{n-1}-1$,n为位数)。

二、C++基础数据类型明细(x86/x64通用)

数据类型 内存占用(字节) 取值范围 说明
布尔型
bool 1 true/false(本质0/非0) 标准规定至少1字节
字符型
char 1 -128 ~ 127(有符号)/ 0~255(无符号) 取决于编译器,默认有符号
signed char 1 -128 ~ 127 显式指定有符号
unsigned char 1 0 ~ 255 无符号字符/二进制数据
wchar_t 2(Windows)/4(Linux) 随平台,用于宽字符(如中文) 存储Unicode字符
char8_t(C++20) 1 0 ~ 255 UTF-8字符
char16_t 2 0 ~ 65535 UTF-16字符
char32_t 4 0 ~ 4294967295 UTF-32字符
整型
short (short int) 2 -32768 ~ 32767 短整型
unsigned short 2 0 ~ 65535 无符号短整型
int 4 -2147483648 ~ 2147483647 整型(最常用)
unsigned int 4 0 ~ 4294967295 无符号整型
long (long int) 4(32位)/8(64位) -231~231-1 / -263~263-1 长整型,平台差异大
unsigned long 4(32位)/8(64位) 0~2^32-1 / 0~2^64-1 无符号长整型
long long 8 -9223372036854775808 ~ 9223372036854775807 超长整型
unsigned long long 8 0 ~ 18446744073709551615 无符号超长整型
浮点型
float 4 ±3.4×10^38(精度~6-7位有效数字) 单精度浮点
double 8 ±1.7×10^308(精度~15-17位有效数字) 双精度浮点(最常用)
long double 8/10/16 随编译器(MSVC=8,GCC=16) 扩展精度浮点

三、实用工具:代码获取当前平台的类型信息

如果想精准获取自己编译器/平台的类型大小和范围,可通过sizeof<climits>/<cfloat>头文件实现,代码可直接运行:

#include <iostream>
#include <climits>   // 整型范围
#include <cfloat>    // 浮点型范围
#include <typeinfo>  // 类型名using namespace std;int main() {// 1. 获取类型字节数cout << "=== 内存占用(字节)===" << endl;cout << "bool: " << sizeof(bool) << endl;cout << "char: " << sizeof(char) << endl;cout << "int: " << sizeof(int) << endl;cout << "long: " << sizeof(long) << endl;cout << "long long: " << sizeof(long long) << endl;cout << "float: " << sizeof(float) << endl;cout << "double: " << sizeof(double) << endl;// 2. 获取整型取值范围cout << "\n=== 整型取值范围 ===" << endl;cout << "int 最小值: " << INT_MIN << ", 最大值: " << INT_MAX << endl;cout << "unsigned int 最大值: " << UINT_MAX << endl;cout << "long long 最小值: " << LLONG_MIN << ", 最大值: " << LLONG_MAX << endl;// 3. 获取浮点型范围cout << "\n=== 浮点型取值范围 ===" << endl;cout << "float 最小值: " << FLT_MIN << ", 最大值: " << FLT_MAX << endl;cout << "double 最小值: " << DBL_MIN << ", 最大值: " << DBL_MAX << endl;cout << "float 有效数字: " << FLT_DIG << " 位" << endl;cout << "double 有效数字: " << DBL_DIG << " 位" << endl;return 0;
}

四、关键注意事项

  1. 平台差异:64位系统中long通常为8字节,32位系统为4字节;long double在GCC下是16字节,MSVC下是8字节,跨平台开发需注意。
  2. 溢出问题:有符号整型溢出会触发“未定义行为”(如int a = INT_MAX + 1;),无符号整型溢出会自动取模(安全)。
  3. 浮点精度:float/double无法精确表示所有小数(如0.1),金融/高精度场景需用decimal库或整数换算。
  4. 字符型陷阱:默认char的符号性由编译器决定,存储二进制数据优先用unsigned char

总结

  1. 核心记忆:int(4字节)、double(8字节)是最常用类型,bool/char固定1字节,long随平台、long long固定8字节;
  2. 取值范围:有符号类型范围是$-2^{n-1} \sim 2^{n-1}-1$,无符号是$0 \sim 2^n-1$(n为总位数);
  3. 实战技巧:用sizeof<climits>/<cfloat>获取精准信息,避免硬编码平台相关的数值范围。
http://www.jsqmd.com/news/267109/

相关文章:

  • 基于ssm+vue的学习空间服务平台[ssm]-计算机毕业设计源码+LW文档
  • EVCC EEBus智能充电:解锁家庭能源管理新境界
  • 基于python的电子商务购物商城系统设计与实现 协同过滤算法 多商家 会员折扣 积分兑换
  • 基于ssm+vue的网上代驾调度平台[ssm]-计算机毕业设计源码+LW文档
  • TrollInstallerX终极安装手册:iOS 14-16系统免越狱应用部署实战指南
  • 如何让每次OBS直播都像电影大片:StreamFX特效插件5分钟上手指南
  • Frigate开源监控系统:智能家庭安防的终极指南
  • 【Linalg】ElementwiseOpFusion 中其他优化模式技术分析
  • 【2026】 LLM 大模型系统学习指南 (5)
  • 重塑音乐体验:探索新一代插件管理器的无限可能
  • 【2026】 LLM 大模型系统学习指南 (6)
  • 2026年十大灵活用工平台排行榜,品为灵工(品为企服)拔得头筹 - 华Sir1
  • 原圈科技领衔2026AI市场分析榜单,助您告别信息焦虑与无效获客
  • 全网首推!154 页 RAG 实战手册,从基础入门到独立搭建RAG,全程干货,无废话!
  • 2026年梳理系统门窗招商加盟,山西科典优势在哪 - 工业品牌热点
  • ESP-01系列
  • 2026年全国灵活用工十大平台综合盘点:合规、稳定与效能如何兼得 - 华Sir1
  • 2026年十大灵活用工平台推荐:强合规、高实用,助力企业高效用工 - 华Sir1
  • 【飞腾平台实时Linux方案系列】第十二篇 - 飞腾平台实时Linux低功耗优化实践。
  • 重构微型泵版图:2026高性价比替代进口微型磁力泵厂家推荐 - 品牌2026
  • 【飞腾平台实时Linux方案系列】第十三篇 - 飞腾平台实时Linux中断优化与硬实时保障。
  • RimSort:彻底解决RimWorld模组管理难题的终极工具
  • composer报错:安装依赖需要输入token的情况
  • 【飞腾平台实时Linux方案系列】第十四篇 - 飞腾平台实时Linux远程运维与监控方案。
  • 2026年高速制袋机定制厂家排名,瑞安市天晟包装机械有限公司名列前茅! - 工业品牌热点
  • 小米音乐Docker镜像技术指南:架构创新与智能音乐管理
  • 2026年灵活用工平台实力TOP10榜单:资质、规模与服务体系三大维度解析 - 华Sir1
  • 【飞腾平台实时Linux方案系列】第十五篇 - 飞腾平台轨道交通实时控制方案设计。
  • 2026年可靠的地质勘探钻机,油电双源全液压勘探钻机,勘探钻机厂家新品推荐榜 - 品牌鉴赏师
  • 计算机毕业设计Django+Vue.js高考推荐系统 高考可视化 大数据毕业设计(源码+LW文档+PPT+详细讲解)