自学内容网 自学内容网

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


在这里插入图片描述

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


在这里插入图片描述


💯前言

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 中大写字母与小写字母之间的差值为 32
        std::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++ 数据类型的深入理解,开发者能够更好地控制内存优化性能,并为程序添加强大的功能。 不论是字符型整型浮点型布尔型还是常量类型,它们各自的优势和适用场景使得程序开发更为灵活和高效

在这里插入图片描述



原文地址:https://blog.csdn.net/2201_75539691/article/details/144122148

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!