【C++】简单数据类型详解


在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: C++

文章目录

  • 💯前言
  • 💯字符型(char)
    • 1.1 ASCII 码表
  • 💯整型(int)
    • 2.1 整型的分类
    • 2.2 有符号和无符号整型
    • 2.3 跨平台差异
    • 2.4 整型数据类型比较表
  • 💯浮点型(float, double, long double)
    • 3.1 浮点型的分类
    • 3.2 在 C/C++ 中小数的书写形式
    • 3.3 为什么需要后缀 `f`?
    • 3.4 浮点型数据类型比较表
  • 💯布尔型(bool)
  • 💯总结与应用场景
  • 五、总结


在这里插入图片描述


💯前言

C++ 是一门功能强大且灵活的编程语言,能够处理从简单到复杂的各种数据。理解 C++ 中的数据类型是编写高效和鲁棒代码的基石。本文将深入探讨 C++各种数据类型的特性、内存占用、应用场景以及实现方式,力求为读者提供系统性的理解。
C++ 中的数据类型可大致分为基本数据类型派生数据类型基本数据类型包括字符型整型浮点型布尔型,这些类型是 C++ 编程中的基本单元,奠定了程序数据结构和逻辑运算的基础。 接下来,我们将详细分析每一种数据类型的定义、特性、应用及其在程序设计中的具体实现方式。

C++ 参考手册
在这里插入图片描述


💯字符型(char)

在这里插入图片描述
使用场景:字符型用于存储单个字符,例如 ASCII 字符集中的字符。通常占用 1 字节,它的存储范围可以涵盖简单字符,如字母、数字和特殊符号。字符型通常用于表示标识符、符号或者单个字母。

  • char 是 C++ 中的基本数据类型,专门用于表示字符。
  • 存储范围:通常为 -128 到 127(有符号),或 0 到 255(无符号)。
  • 内存占用:1 字节。

在 C++ 中,字符以 ASCII 编码 的形式存储,每个字符都有一个相应的 ASCII 值。例如,大写字母 ‘A’ 的 ASCII 值是 65,而小写字母 ‘a’ 的 ASCII 值是 97。ASCII 编码是一种标准化的字符编码方案,便于在不同的计算机系统之间交换信息。


1.1 ASCII 码表

在这里插入图片描述
下列表格包含有全部 128 个 ASCII 十进制 (dec)、八进制 (oct)、十六进制 (hex) 及字符 (ch) 编码。

dec (十进制)oct (八进制)hex (十六进制)ch (字符)
000000NUL (空)
100101SOH (标题开始)
200202STX (正文开始)
300303ETX (正文结束)
400404EOT (传送结束)
500505ENQ (询问)
600606ACK (确认)
700707BEL (响铃)
801008BS (退格)
901109HT (横向制表)
100120ALF (换行)
110130BVT (纵向制表)
120140CFF (换页)
130150DCR (回车)
140160ESO (移出)
150170FSI (移入)
1602010DLE (退出数据链)
1702111DC1 (设备控制1)
1802212DC2 (设备控制2)
1902313DC3 (设备控制3)
2002414DC4 (设备控制4)
2102515NAK (反确认)
2202616SYN (同步空闲)
2302717ETB (传输块结束)
2403018CAN (取消)
2503119EM (媒介结束)
260321ASUB (替换)
270331BESC (退出)
280341CFS (文件分隔符)
290351DGS (组分隔符)
300361ERS (记录分隔符)
310371FUS (单元分隔符)
3204020(空格)
3304121!
3404222"
3504323#
3604424$
3704525%
3804626&
3904727
4005028(
4105129)
420522A*
430532B+
440542C,
450552D-
460562E.
470572F/
48060300
49061311
50062322
51063333
52064344
53065355
54066366
55067377
56070388
57071399
580723A:
590733B;
600743C<
610753D=
620763E>
630773F?
6410040@
6510141A
6610242B
6710343C
6810444D
6910545E
7010646F
7110747G
7211048H
7311149I
741124AJ
751134BK
761144CL
771154DM
781164EN
791174FO
8012050P
8112151Q
8212252R
8312353S
8412454T
8512555U
8612656V
8712757W
8813058X
8913159Y
901325AZ
911335B[
921345C\
931355D]
941365E^
951375F_
9614060`
9714161a
9814262b
9914363c
10014464d
10114565e
10214666f
10314767g
10415068h
10515169i
1061526Aj
1071536Bk
1081546Cl
1091556Dm
1101566En
1111576Fo
11216070p
11316171q
11416272r
11516373s
11616474t
11716575u
11816676v
11916777w
12017078x
12117179y
1221727Az
1231737B{
1241747C
1251757D}
1261767E~
1271777FDEL (删除)

此表适用于基础编程学习与字符编码参考。

常见的 ASCII 码应用

  • 字符 A-Z 的 ASCII 码值为 65-90
  • 字符 a-z 的 ASCII 码值为 97-122
  • 数字字符 0-9 的 ASCII 码值为 48-57
  • 换行符 的 ASCII 码值为 10

在 C++ 程序中,可以使用 ASCII 码来实现字符与整数的转换,从而简化某些数据操作。例如,可以将字符转换为其对应的 ASCII 值,或者根据整数值生成相应的字符。

示例代码

#include <iostream>int main() {char c1 = 'A';int asciiValue = static_cast<int>(c1);std::cout << "字符 A 的 ASCII 值是: " << asciiValue << std::endl;char c2 = 66;  // 直接使用 ASCII 值表示字符std::cout << "ASCII 值 66 对应的字符是: " << c2 << std::endl;return 0;
}

输出

字符 A 的 ASCII 值是: 65
ASCII 值 66 对应的字符是: B

在这个例子中,我们将字符 'A' 转换为它的 ASCII 值,并直接使用 ASCII 值 66 来表示字符 'B'

字符型在程序中的灵活性使得它在文本处理和符号运算中非常有用。例如,我们可以使用字符的 ASCII 值关系将所有小写字母转换为大写字母。以下是一个例子:

示例代码

#include <iostream>int main() {for (char c = 'a'; c <= 'z'; ++c) {char upperCase = c - 32;  // ASCII 中大写字母与小写字母之间的差值为 32std::cout << c << " -> " << upperCase << std::endl;}return 0;
}

输出

a -> A
b -> B
...
z -> Z

这种方式利用了 ASCII 值之间的数学关系,有效地实现了字符的转换。此类技术在文本处理、字符比较等场景中非常有用。


💯整型(int)

在这里插入图片描述
整型用于存储整数,包括正数、负数和零。C++ 提供了多种整型,以适应不同数据范围和内存占用的需求。


2.1 整型的分类

在这里插入图片描述

  • short:短整型,占用 2 字节,存储范围为 -32,768 到 32,767。适用于较小范围的整数。
  • int:标准整型,占用 4 字节,存储范围为 -2,147,483,648 到 2,147,483,647。适用于大多数日常应用。
  • long:长整型,在 32 位系统中通常与 int 相同,占用 4 字节;在 64 位系统中通常占用 8 字节。适合需要更大存储空间的场景。
  • long long:更长的整型,占用 8 字节,存储范围为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。适用于存储非常大的整数。

每种整型在不同平台和编译器上的实现可能有所不同,因此为了确保跨平台代码的兼容性,通常需要使用 <cstdint> 提供的固定宽度整数类型,例如 int32_tint64_t


2.2 有符号和无符号整型

在这里插入图片描述

  • 有符号类型(默认):可以存储正数和负数。
  • 无符号类型:只能存储非负数,使用 unsigned 关键字定义,例如 unsigned int

无符号整型特别适合用于确保数值始终为非负数的场景,例如循环计数器、数组索引等。

示例代码

short s = 32000;
int i = 1000000;
long l = 1000000000;
long long ll = 9000000000000000000;
unsigned int ui = 4000000000;std::cout << "short: " << s << std::endl;
std::cout << "int: " << i << std::endl;
std::cout << "long: " << l << std::endl;
std::cout << "long long: " << ll << std::endl;
std::cout << "unsigned int: " << ui << std::endl;

在上述代码中,可以看到整型类型的多样性。无符号整型 unsigned int 可以表示的范围从 0 到 4,294,967,295,比有符号类型多出一倍的数值范围。


2.3 跨平台差异

在这里插入图片描述
不同系统和编译器对整型的实现可能存在差异,尤其是 long 类型。在 32 位系统中,longint 的存储范围相同,而在 64 位系统中,long 通常占用 8 字节。

可以使用 sizeof 关键字查看数据类型的实际字节数:

std::cout << "Size of int: " << sizeof(int) << " bytes" << std::endl;

这种方式可以帮助开发者了解在不同平台上数据类型的存储情况,以确保程序的正确性和兼容性。


2.4 整型数据类型比较表

在这里插入图片描述

数据类型占用字节数(一般情况)有符号范围无符号范围
short2-32,768 到 32,7670 到 65,535
int4-2,147,483,648 到 2,147,483,6470 到 4,294,967,295
long4 或 8-2,147,483,648 到 2,147,483,647(32 位)0 到 18,446,744,073,709,551,615(64 位)
long long8-9,223,372,036,854,775,808 到 9,223,372,036,854,775,8070 到 18,446,744,073,709,551,615

整型的数据类型选择需要根据程序的实际需求,合理权衡内存占用和数据范围。例如,short 适合用于占用内存少的小范围整数,而 long long 适合用于需要非常大数值范围的场景。


💯浮点型(float, double, long double)

在这里插入图片描述
浮点型用于表示带小数部分的数值,例如科学计算、物理测量等。C++ 提供了三种浮点型,以满足不同精度和内存需求。


3.1 浮点型的分类

在这里插入图片描述

  • float:单精度浮点型,占用 4 字节,有效位数为 6-7 位。适用于对内存要求较高但对精度要求不太高的场景。
  • double:双精度浮点型,占用 8 字节,有效位数为 15-16 位。适用于需要较高精度的计算。
  • long double:扩展精度浮点型,占用 10 或 16 字节(依系统而定),有效位数为 18-19 位。适用于需要极高精度的场景。

浮点型在科学计算、物理仿真、金融数据分析等领域有着广泛的应用。浮点数在计算机中是通过科学计数法的方式表示的,因此浮点数的表示范围非常大,但在计算精度上可能会存在一定的误差。


3.2 在 C/C++ 中小数的书写形式

在这里插入图片描述
在 C/C++ 中,小数可以用多种形式来表示,以适应科学计数法的需求。

  • 3.14:编译器会默认识别为 double 类型。
  • 3.14f:明确声明为 float 类型。
  • 1e5:科学计数法,表示 1.0 × 10^5
  • 1e5 + 10:表示 1 × 100000 + 10 = 100010
  • 1.23e5 + 10:表示 1.23 × 100000 + 10 = 123010

示例代码

float a = 3.14f;  // 必须加上后缀 f,否则 3.14 会被视为 double 类型
double b = 1e5;   // 使用科学计数法
std::cout << "Float: " << a << "
Double: " << b << std::endl;

3.3 为什么需要后缀 f

在这里插入图片描述
在 C++ 中,默认情况下,带小数的常量被认为是 double 类型。如果要定义 float 类型的变量,必须在数值后添加 fF 后缀,否则会发生隐式类型转换,这可能导致性能下降或精度损失。

示例代码

float a = 5.5f;  // 必须加上后缀 f,否则 5.5 会被视为 double 类型
std::cout << a;  // 输出 5.5

这种做法在对内存和性能有较高要求的场景中显得尤为重要。


3.4 浮点型数据类型比较表

在这里插入图片描述

数据类型默认后缀占用字节数有效位数(精度)范围
floatf46-7 位±3.4×10^-38 到 ±3.4×10^38
double815-16 位±1.7×10^-308 到 ±1.7×10^308
long double10 或 1618-19 位±3.4×10^-4932 到 ±3.4×10^4932

在需要高精度计算的场景中,通常使用 doublelong double 类型,而 float 则常用于对内存要求更高的应用中。


💯布尔型(bool)

在这里插入图片描述
布尔型用于表示逻辑上的真与假。它只有两个可能的取值:true(真)和 false(假)。布尔型在逻辑判断、条件控制和状态标记中有广泛应用。

  • 存储范围truefalse
  • 内存占用:通常为 1 字节,但编译器可能对其进行优化。

示例代码

bool isStudent = true;
if (isStudent) {std::cout << "This person is a student." << std::endl;
}

布尔型因其简单和高效而在条件判断和逻辑控制中非常常见。


💯总结与应用场景

在这里插入图片描述
C++ 中的不同数据类型各有特点,适用于不同的编程需求。通过合理选择数据类型,可以优化程序的内存利用和计算性能。

  • 字符型 用于存储单个字符,适合用于标识符和符号表示。
  • 整型 提供了多种选择,从短整型到长整型,用于存储不同范围的整数。
  • 浮点型 适用于科学计算,提供了从单精度到扩展精度的多种精度选择。
  • 布尔型 适合用于逻辑控制和条件判断。

在嵌入式系统中,资源有限,合理选择数据类型尤为重要。而在科学计算领域,精度的选择又是核心考量。通过对数据类型的充分理解,开发者可以编写出更加高效、稳定的程序。


五、总结

在这里插入图片描述

  • 在这里插入图片描述
    理解 C++ 中的简单数据类型是编写高效健壮程序的基础。 不同的数据类型具有不同的存储范围内存占用适用场景。 在编写代码时,根据实际需求选择合适的数据类型,既可以提高程序的运行效率,又能有效利用系统资源。 通过对 C++ 数据类型的深入理解,开发者能够更好地控制内存优化性能,并为程序添加强大的功能。 不论是字符型整型浮点型布尔型还是常量类型,它们各自的优势和适用场景使得程序开发更为灵活和高效

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/62262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue构建错误解决:(error TS6133)xxx is declared but its value is never read.

TypeScript会检查代码中未使用的变量&#xff0c;如果vscode安装了Vue的语法检查工具&#xff0c;会看到告警提示&#xff0c;再npm run build的时候&#xff0c;这个警告会变成错误 解决方案1&#xff1a;删除定义了未使用的变量 推荐使用这种方案&#xff0c;能保证代码的质…

泷羽sec---shell作业

作业一 写计算器 使用bc命令 需要进行安装bc 代码如下&#xff1a; #!/bin/bash echo "-----------------------------------" echo "输入 f 退出" echo "可计算小数和整数" echo "用法如&#xff1a;1.12.2" echo "------…

混淆零碎知识点

minifyEnabled true //混淆开关 zipAlignEnabled true // Zipalign优化 shrinkResources true // 移除无用的resource文件 &#xff08;必须要混淆开了之后才才可以设置为true&#xff09; proguard-rules.pro 为混淆文件 //整个文件保留 不被混淆 -keep class com.cn…

DeSTSeg: Segmentation Guided Denoising Student-Teacher for Anomaly Detection

DeSTSeg: Segmentation Guided Denoising Student-Teacher for Anomaly Detection 清华、苹果 个人感觉 Introduction 很自然的让读者理解作者问题的提出&#xff0c;也有例子直接证明了这个问题的存在&#xff0c;值得借鉴&#xff01;&#xff01; Related work写的也很不…

第T9周:Tensorflow实现猫狗识别(2)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框 架: Tensorflow 2.10.0 &#xff08;二&#xff09;具体…

分布式锁的实现原理

作者&#xff1a;来自 vivo 互联网服务器团队- Xu Yaoming 介绍分布式锁的实现原理。 一、分布式锁概述 分布式锁&#xff0c;顾名思义&#xff0c;就是在分布式环境下使用的锁。众所周知&#xff0c;在并发编程中&#xff0c;我们经常需要借助并发控制工具&#xff0c;如 mu…

搭建帮助中心到底有什么作用?

在当今快节奏的商业环境中&#xff0c;企业面临着日益增长的客户需求和竞争压力。搭建一个有效的帮助中心对于企业来说&#xff0c;不仅是提升客户服务体验的重要途径&#xff0c;也是优化内部知识管理和提升团队效率的关键。以下是帮助中心在企业运营中的几个关键作用&#xf…

深入浅出剖析典型文生图产品Midjourney

2022年7月,一个小团队推出了公测的 Midjourney,打破了 AIGC 领域的大厂垄断。作为一个精调生成模型,以聊天机器人方式部署在 Discord,它创作的《太空歌剧院》作品,甚至获得了美国「数字艺术/数码摄影」竞赛单元一等奖。 这一事件展示了 AI 在绘画领域惊人的创造力,让人们…

python+docx:(二)页眉页脚、表格操作

目录 页眉页脚 表格 表格样式 插入表格 插入行/列 合并单元格 单元格 页眉页脚 页眉页脚操作需要访问文件的section&#xff0c;可通过添加页脚来添加页码。 from docx import Document from docx.enum.text import WD_PARAGRAPH_ALIGNMENT, WD_ALIGN_PARAGRAPH, WD_CO…

Matlab Simulink 电力电子仿真-单相电压型半桥逆变电路分析

目录 一、单相电压型半桥逆变电路仿真模型 1.电路模型 2.电路模型参数 二、仿真分析 三、总结 1.优缺点 2.应用场景 一、单相电压型半桥逆变电路仿真模型 1.电路模型 单相电压型半桥逆变电路是一种常见的逆变电路&#xff0c;主要用于将直流电源转换为交流电源。 &…

C++入门——“C++11-lambda”

引入 C11支持lambda表达式&#xff0c;lambda是一个匿名函数对象&#xff0c;它允许在函数体中直接定义。 一、初识lambda lambda的结构是&#xff1a;[ ] () -> 返回值类型 { }。从左到右依次是&#xff1a;捕捉列表 函数参数 -> 返回值类型 函数体。 以下是一段用lam…

如何保护LabVIEW程序免遭反编译

在正常情况下&#xff0c;LabVIEW程序&#xff08;即编译后的可执行文件或运行时文件&#xff0c;如 .exe 或 .llb&#xff09;无法直接被反编译出源码。然而&#xff0c;有一些需要特别注意的点&#xff1a; 1. LabVIEW的编译机制 LabVIEW编译器会将源码&#xff08;.vi文件&a…

提升76%的关键-在ModelMapper中实现性能提升的几种方法

目录 前言 一、ModelMapper基础知识 1、深入ModelMapper 2、深入Configuration配置 3、深入MappingEngineImpl 二、默认加载模式 1、基础测试代码 三、持续优化&#xff0c;慢慢提升 1、增加忽略字段 2、设置忽略空值模式 3、设置命名模式 4、采用精准匹配模式 四、…

【C语言】结构体、联合体、枚举类型的字节大小详解

在C语言中&#xff0c;结构体&#xff08;struct&#xff09;和联合体&#xff08;union&#xff09; 是常用的复合数据类型&#xff0c;它们的内存布局和字节大小直接影响程序的性能和内存使用。下面为大家详细解释它们的字节大小计算方法&#xff0c;包括对齐规则、内存分配方…

【优选算法】位运算

目录 常见位运算总结1、基础位运算2、给一个数n&#xff0c;确定它的二进制位的第x位上是0还是13、将一个数n的二进制位的第x位改成14、将一个数n的二进制位的第x位改成05、位图的思想6、提取一个数n的二进制位中最右侧的17、将一个数n的二进制位中最右侧的1变为08、位运算的优…

jQuery九宫格抽奖,php处理抽奖信息

功能介绍 jQuery九宫格抽奖是一种基于jQuery库的前端抽奖效果。通过九宫格的形式展示抽奖项&#xff0c;用户点击抽奖按钮后&#xff0c;九宫格开始旋转&#xff0c;最终停在一个随机位置上&#xff0c;此位置对应的抽奖项为用户的中奖结果。 本文实现九宫格的步骤为&#xf…

AI界的信仰危机:单靠“规模化”智能增长的假设,正在面临挑战

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Unity类银河战士恶魔城学习总结(P149 Screen Fade淡入淡出菜单)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了进入游戏和死亡之后的淡入淡出动画效果 UI_FadeScreen.cs 1. Animator 组件的引用 (anim) 该脚本通过 Animator 控制 UI 元…

【C语言篇】探索 C 语言结构体:从基础语法到数据组织的初体验

我的个人主页 我的专栏&#xff1a;C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 目录 什么是结构体结构体的定义与使用结构体内存布局嵌套结构体与指针结构体数组的操作结构体与函数结构体内存对齐机制位域与结构体的结合动态内存分…

COMSOL工作站:配置指南与性能优化

COMSOL Multiphysics 求解的问题类型相当广泛&#xff0c;提供了仿真单一物理场以及灵活耦合多个物理场的功能&#xff0c;供工程师和科研人员来精确分析各个工程领域的设备、工艺和流程。 软件内置的#模型开发器#包含完整的建模工作流程&#xff0c;可实现从几何建模、材料参数…