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

C++ 的基本内置类型(十二)

C++ 作为一门强大的编程语言,其内置类型是开发者必须掌握的基础。本文将详细介绍 C++ 的基本内置类型,包括算术类型和空类型,探讨它们的特性、尺寸以及在机器上的实现方式。

一、 基本内置类型概述

C++ 定义了一套基本数据类型,主要包括:

  • 算术类型 (Arithmetic Types):涵盖字符、整型、布尔值和浮点数。
  • 空类型 (void):不对应具体值,常用于函数无返回值的情况,例如 void func();

算术类型又分为两大类:整型 (Integral Types,包括字符和布尔类型) 和浮点型 (Floating-Point Types)。这些类型的尺寸因机器而异,但 C++ 标准规定了最小尺寸,编译器可以选择更大的实现。

以下是 C++ 算术类型及其最小尺寸的概览:

类型含义最小尺寸
bool布尔类型未定义
char字符8 位
wchar_t宽字符16 位
char16_tUnicode 字符16 位
char32_tUnicode 字符32 位
short短整型16 位
int整型16 位
long长整型32 位
long long长整型64 位
float单精度浮点数6 位有效数字
double双精度浮点数10 位有效数字
long double扩展精度浮点数10 位有效数字

二、算术类型的细节

2.1. 布尔类型

bool 类型只有两个值:truefalse,用于逻辑判断。虽然标准未定义其具体尺寸,但通常占用 1 个字节 (8 位)。

2.2. 字符类型

C++ 提供多种字符类型以支持国际化:

  • char:基本字符类型,大小与机器字节相同 (通常 8 位),足以存储基本字符集中的任意字符。
  • wchar_t:宽字符类型,用于扩展字符集,常见于多语言支持。
  • char16_tchar32_t:为 Unicode 字符设计,分别占用 16 位和 32 位。

2.3. 整型

除字符和布尔类型外,整型包括:

  • short:至少 16 位。
  • int:至少与 short 一样大。
  • long:至少与 int 一样大。
  • long long:C++11 新增,至少与 long 一样大。

这些类型的大小关系为:short ≤ int ≤ long ≤ long long

2.4. 浮点型

浮点型用于表示小数:

  • float:单精度,通常 32 位,有效数字约 7 位。
  • double:双精度,通常 64 位,有效数字约 16 位。
  • long double:扩展精度,尺寸因实现而异 (96 或 128 位),适用于高精度需求。

三、带符号与无符号类型

除布尔型和扩展字符型外,整型分为:

  • 带符号 (Signed):可表示正数、负数和 0,例如 intshort
  • 无符号 (Unsigned):仅表示非负数,通过在类型前加 unsigned 定义,例如 unsigned int (可简写为 unsigned)。

字符类型例外,分为三种:

  • char:可能是带符号或无符号,由编译器决定。
  • signed char:明确带符号。
  • unsigned char:明确无符号。

例如:

  • 8 位 unsigned char 表示范围为 0 到 255。
  • 8 位 signed char 通常表示 -128 到 127。

四、机器实现:从比特到内存

计算机以比特序列存储数据,例如 00011011。内存以字节 (Byte,通常 8 位) 为最小寻址单位,多个字节组成字 (Word,通常 32 或 64 位)。每个字节关联一个地址,例如:

地址    数据
736424  00111100
736425  11001010

数据类型的含义依赖于解释方式:

  • 若地址 736424 处是 float (32 位),则占用整个字,值由浮点表示法决定。
  • 若为 unsigned char (8 位),则只占用 736424 的字节,可能表示分号 (;).

五、总结

C++ 的内置类型为开发者提供了灵活性与控制力。理解它们的尺寸、范围及机器实现,有助于编写高效、跨平台的代码。无论是处理字符国际化,还是选择合适的浮点精度,掌握这些基础知识都是迈向 C++ 进阶开发的关键一步。

希望这篇文章能帮助你更深入地理解 C++ 的基本类型!如果有任何疑问,欢迎留言讨论。

相关文章:

  • springboot body 转对象强验证属性多余属性抛错误
  • [NO-WX179]基于springboot+微信小程序的在线选课系统
  • msvcp140.dll是什么文件?修复丢失msvcp140.dll的方法指南
  • Python FastAPI 面试题及参考答案
  • [CLS] Token 在 ViT(Vision Transformer)中的作用与实现
  • 模拟算法专题
  • 机器学习实战,涉及数据预处理、监督算法、无监督算法、模型评估与改进-思维导图
  • 【2025年第三期】全国数字人才技能提升师资培训班邀请函
  • LangChain其它五类组件详解(6)—— 查询分析(Query analysis)
  • uni-app常用模板
  • Redis(Remote Dictionary Server)
  • C#更新Nginx SSL证书
  • nestjs 多环境配置
  • git 操作:撤销Merge
  • NOIP 2024 解题分析
  • nginx之gzip_static详解
  • Matplotlib查看 rc 参数的方法
  • JNI 本地方法调用 Java 静态方法 和 实例方法对比;通过本地方法创建 Java 对象;本地方法访问 Java 数组元素;本地方法错误返回给 Java
  • Linux Shell 基础操作笔记
  • charles接口测试(断点测试)
  • 凤阳鼓楼脱落瓦片2023年刚经历修复,凤阳县文旅局长回应是否违建等焦点问题
  • 国台办:不管台湾地区领导人讲什么,都改变不了台湾是中国一部分的地位和事实
  • 搜狐一季度营收1.36亿美元,净亏损同比收窄超两成
  • 这位中国电影早期的全能奇才,90年前唱响国歌
  • 莫高义在第四届中国新闻发言人论坛开幕式上的致辞
  • 视频丨歼-10CE首次实战大放异彩