c++在创建变量或常量时,必须指定数据类型,否则无法为其分配内存空间
整型
整型变量表示的是整数类型的数据
C++中共有4种表示整型的类型,区别在于所占内存空间和可表示的取值范围不同。
数据类型 | 占用空间 | 取值范围 |
---|---|---|
short(短整型) | 2 字节 | (-2^15 ~ 2^15-1) |
int(整型) | 4 字节 | (-2^31 ~ 2^31-1) |
long(长整型) | 32 位编译器占 4 个字节 | |
64 位编译器占 8 个字节 | (-2^31 ~ 2^31-1) | |
long long(长长整型) | 8 字节 | (-2^63 ~ 2^63-1) |
sizeof 作用
浮点数
浮点型变量表示浮点小数类型的数据。
精度 | 数据类型 | 占用空间 | 有效范围 |
---|---|---|---|
单精度 | float | 4 字节 | 6~7 位有效数字 |
双精度 | double | 8 字节 | 15~16 位有效数字 |
有效数字是指数字中具有非零的最低位数。例如,数字12345具有5个有效数字,而数字0.000123具有4个有效数字。
float和double之间的主要区别在于精度和范围。
- 精度:double类型的精度比float类型更高。这意味着使用double类型可以获得更准确的结果,尤其是在进行浮点运算时。
- 范围:double类型的范围比float类型更广。这意味着使用double类型可以表示更大的数值范围。
在选择使用float还是double时,需要考虑精度和范围的需求。如果需要更高的精度和更大的范围,应该选择使用double类型。如果对精度要求不高,但需要节省存储空间或减少计算开销,可以选择使用float类型。
在大多数编程语言中,浮点数默认是双精度的,但你也可以明确地指定一个变量为单精度或双精度。例如,在C++中,你可以使用"f"后缀来声明一个单精度浮点数,如"float myFloat = 3.14f;“,或者使用"lf"后缀来声明一个双精度浮点数,如"double myDouble = 3.14lf;”。在其他语言中,如Java或Python,你通常不需要指定浮点数的精度,因为它们默认使用双精度浮点数。
字符型
C和C++语言中,字符型变量只占用1个字节。
字符型变量是将对应的ASCII编码存放至内存,而不是字符本身。
作用:字符型变量可表示单个字符。
语法:char ch = ‘a’;
注1:使用单引号表示字符,且单引号内有且仅有1个字符,不可以是字符串。
注2:使用 (int) ch 查询字符对应的ASCII编码。'a’对应97,'A’对应65。
转义字符
转义字符是一种特殊的字符序列,用于在字符串中插入无法直接输入的字符或控制字符。它们在编程和文本处理中非常有用,可以用于表示特殊字符、控制字符、非打印字符等。
以下是转义字符的常见作用:
- 插入特殊字符:有些字符在字符串中有特殊含义,例如双引号和单引号。使用转义字符可以插入这些特殊字符,而不会触发它们的特殊含义。
- 控制文本格式:转义字符可以用于控制文本的格式,例如换行符(\n)、制表符(\t)等。
- 插入非打印字符:有些字符在文本中无法直接输入,例如控制字符。使用转义字符可以插入这些非打印字符。
以下是使用转义字符时需要注意的事项:
- 转义序列的长度:转义序列通常由反斜杠(\)后跟一个或多个字符组成。确保转义序列的长度正确,否则可能会导致错误或意外的行为。
- 转义序列的种类:不同的编程语言和环境可能支持不同的转义序列。确保你了解你所使用的语言或环境支持哪些转义序列。
- 转义序列的顺序:在字符串中,转义序列的顺序很重要。确保按照正确的顺序使用转义序列,以避免意外的行为。
以下是常见的转义字符及其含义和ASCII码值(十进制):
转义字符 | 含义 | ASCII码值(十进制) |
---|---|---|
\n | 换行符 | 10 |
\r | 回车符 | 13 |
\t | 制表符 | 9 |
\v | 垂直制表符 | 11 |
\ | 反斜杠符本身 | 92 |
" | 双引号字符 | 34 |
’ | 单引号字符 | 39 |
\0 | 空字符(NULL) | 0 |
注意:表格中的ASCII码值是基于常见的ASCII编码标准,但实际上不同的环境和编程语言可能使用不同的编码标准。因此,具体的ASCII码值可能会因环境和编程语言而异。
字符串型
作用:表示字符串
(1)C风格字符串: char 变量名[] = “字符串值”;
(2)C++风格字符串: string 变量名 = “字符串值”;
nclude <iostream>
#include <string>
using namespace std;
int main() {
//C风格字符串
char cStr[] = "hello c str";
cout << cStr << endl;
//C++风格字符串
string cppStr = "hello cpp str";
cout << cppStr << endl;
return 0;
}
注1:使用C风格字符串时,需使用双引号将字符串值括起来。
注2:使用C++风格字符串时,需包含头文件#include 。
布尔型
布尔数据类表示真或假
bool 类型占 1 个字节,且只有两个值
- true:真、1
- false:假、0
C++的 bool 类型中,true 或任意非 0 值表示“真”,false 或 0 表示“假”
int main() {
bool flag = true;
cout << flag << endl; // 1(真)
/* C++的bool类型中,true 或 任意非0值 均代表“真” */
flag = 6.66f;
cout << flag << endl; // 1(真)
flag = false;
cout << flag << endl; // 0(假)
/* C++的bool类型中,false 或 0值 代表“假” */
flag = 0;
cout << flag << endl; // 0(假)
cout << "bool类型占用的内存大小:" << sizeof(bool) << endl;
cout << "bool类型占用的内存大小:" << sizeof(flag) << endl;
return 0;
}
小结
C++ 提供了多种数据类型,以满足不同编程需求。以下是一个简化的总结,以表格形式表示 C++ 的数据类型、所占字节大小和取值范围:
数据类型 | 所占字节大小 | 取值范围 |
---|---|---|
整型 (int) | 4 字节 | -2,147,483,648 到 2,147,483,647 |
短整型 (short) | 2 字节 | -32,768 到 32,767 |
长整型 (long) | 8 字节 (通常在 64 位系统上) | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
长长整型 (long long) | 16 字节 (在某些平台上可能更大) | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 (通常) |
无符号整型 (unsigned int) | 4 字节 | 0 到 4,294,967,295 |
无符号短整型 (unsigned short) | 2 字节 | 0 到 65,535 |
无符号长整型 (unsigned long) | 8 字节 (通常在 64 位系统上) | 0 到 18,446,744,073,709,551,615 |
无符号长长整型 (unsigned long long) | 16 字节 (在某些平台上可能更大) | 0 到 18,446,744,073,709,551,615 (通常) |
浮点型 (float) | 4 字节 | ±3.4E±38 (大约 ±3.4E±38) |
双精度浮点型 (double) | 8 字节 (通常在所有平台上) | ±1.8E±308 (大约 ±1.8E±308) |
长双精度浮点型 (long double) | 可变 (通常为 12 或更多字节) | 可变范围取决于实现,通常更大于 double 的范围 |
字符型 (char) | 1 字节 (通常为 ASCII 或 UTF-8) | ASCII 值范围:0 到 127 (或 UTF-8 的其他值) |
有符号字符型 (signed char) | 同 char,但支持负值范围:-128 到 127 | 同 char,但支持负值范围:-128 到 127 |
无符号字符型 (unsigned char) | 同 char,但无符号范围:0 到 255 或更高值 | 同 char,但无符号范围:0 到 255 或更高值 |
bool (布尔型) | 可变,通常为 1 或 2 字节(取决于实现) | true 或 false (或 true、false 在某些平台/编译器上) |
void (空类型) | 可变,通常为 0 或 1 字节(取决于实现) | 无定义/特殊值,通常用于指针类型和特殊场景(例如函数返回类型为 void) |
请注意,表格中的数据和取值范围可能会因不同的平台、编译器或 C++ 标准而有所变化。这些信息基于常见的实现和标准。在实际编程中,建议查阅特定编译器或平台的手册以获取准确的信息。