C++学习第三弹:数据类型
[[C++学习第二弹:C++的基础语法]]中提到了类型这一概念,在使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当我们创建一个变量时,就会在内存中保留一些空间。我们可能需要存储各种数据类型(比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型等)的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么。
基本内置类型:
C++定义了一套包括算术类型(arithmetic type)和空类型(void)在内的基本数据类型。其中算术类型包含了字符、整型数、布尔值和浮点数。空类型不对应具体的值,仅用于特殊场合,例如:当一个函数不返回任何值时,选择空类型作为返回类型。
算术类型:
算术类型分为两类:整型(integral type)和浮点型。其中,字符和布尔类型属于整形。
算术类型的尺寸在不同机器上有差别,下面是C++标准规定的尺寸的最小值。
| 数据类型 | 描述 | 大小(字节) | 范围/取值示例 |
|---|---|---|---|
bool |
布尔类型,表示真或假 | 1 | true 或 false |
char |
字符类型,通常用于存储 ASCII 字符 | 1 | -128 到 127 或 0 到 255 |
signed char |
有符号字符类型 | 1 | -128 到 127 |
unsigned char |
无符号字符类型 | 1 | 0 到 255 |
wchar_t |
宽字符类型,用于存储 Unicode 字符 | 2 或 4 | 取决于平台 |
char16_t |
16 位 Unicode 字符类型(C++11 引入) | 2 | 0 到 65,535 |
char32_t |
32 位 Unicode 字符类型(C++11 引入) | 4 | 0 到 4,294,967,295 |
short |
短整型 | 2 | -32,768 到 32,767 |
unsigned short |
无符号短整型 | 2 | 0 到 65,535 |
int |
整型 | 4 | -2,147,483,648 到 2,147,483,647 |
unsigned int |
无符号整型 | 4 | 0 到 4,294,967,295 |
long |
长整型 | 4 或 8 | 取决于平台 |
unsigned long |
无符号长整型 | 4 或 8 | 取决于平台 |
long long |
长长整型(C++11 引入) | 8 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long long |
无符号长长整型(C++11 引入) | 8 | 0 到 18,446,744,073,709,551,615 |
float |
单精度浮点数 | 4 | 约 ±3.4e±38(6-7 位有效数字) |
double |
双精度浮点数 | 8 | 约 ±1.7e±308(15 位有效数字) |
long double |
扩展精度浮点数 | 8、12 或 16 | 取决于平台 |
- 布尔值(bool)的取值是真(true)或假(false)。
- 一个char的大小和一个机器字节一样。
- 一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大。 大多数编译器实现了浮点型的更高的精确度。
带符号类型和无符号类型:
除去布尔型和扩展字符型,其他的整型可以划分为带符号的和无符号的。带符号类型可以表示正数、负数和0,无符号类型仅能表示非负数。
类型int、short、long和long long都是带符号的,通过在这些类型名前添加unsigned就可以得到无符号类型。
与其他整型不同,字符型被分为:char、signed char和unsigned char三种。但要注意,char与signed char不同,类型char实际上会表现为带符号的或不带符号的,这取决于编译器。
如何选择基本类型:
- 明确知晓数值不可能为负时,使用无符号类型。
- 使用int进行数值运算时,short一般太小,long和int差不多,因此数值超过int时直接使用long long。
- 在算数表达式中不要使用char和bool。
- 执行浮点数运算选用double。
派生数据类型:
| 数据类型 | 描述 | 示例 |
|---|---|---|
数组 |
相同类型元素的集合 | int arr[5] = {1, 2, 3, 4, 5}; |
指针 |
存储变量内存地址的类型 | int* ptr = &x; |
引用 |
变量的别名 | int& ref = x; |
函数 |
函数类型,表示函数的签名 | int func(int a, int b); |
结构体 |
用户定义的数据类型,可以包含多个不同类型的成员 | struct Point { int x; int y; }; |
类 |
用户定义的数据类型,支持封装、继承和多态 | class MyClass { ... }; |
联合体 |
多个成员共享同一块内存 | union Data { int i; float f; }; |
枚举 |
用户定义的整数常量集合 | enum Color { RED, GREEN, BLUE }; |
小结:学习了C++的基本数据类型和使用方法。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 柚子小栈!
