====== 2 数据类型 ======
C++规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存。
===== 2.1 整型 =====
**作用**:整型变量表示的是**整数类型**的数据。
C++中能够表示整型的类型有以下几种方式,**区别在于所占内存空间不同**:
^ 数据类型 ^ 占用空间 ^ 取值范围 ^
| short (短整型) | 2字节 | ($-2^{15}$ ~ $2^{15}-1$) |
| int (整型) | 4字节 | (-$2^31$ ~ $2^{31}-1$) |
| long (长整型) | Windows为4字节,Linux为4字节(32位),8字节(64位) | ($-2^{31}$ ~ $2^{31}-1$) |
| long long (长长整型) | 8字节 | ($-2^{63}$ ~ $2^{63}-1$) |
===== 2.2 sizeof关键字 =====
**作用**:利用sizeof关键字可以**统计数据类型所占内存大小**。
**语法**: ''sizeof( 数据类型 / 变量 )''
**示例**:
int main() {
cout << "short 类型所占内存空间为: " << sizeof(short) << endl;
cout << "int 类型所占内存空间为: " << sizeof(int) << endl;
cout << "long 类型所占内存空间为: " << sizeof(long) << endl;
cout << "long long 类型所占内存空间为: " << sizeof(long long) << endl;
system("pause");
return 0;
}
**整型结论**: ''short < int <= long <= long long''
===== 2.3 实型(浮点型) =====
**作用**:用于**表示小数**。
浮点型变量分为两种:
- 单精度 float
- 双精度 double
两者的**区别**在于表示的有效数字范围不同。
^ 数据类型 ^ 占用空间 ^ 有效数字范围 ^
| float | 4字节 | 7位有效数字 |
| double | 8字节 | 15~16位有效数字 |
**示例**:
int main() {
float f1 = 3.14f; // 注意:如果不加f,编译器通常默认为double,加f显式声明为float
double d1 = 3.14;
cout << f1 << endl;
cout << d1 << endl;
cout << "float sizeof = " << sizeof(f1) << endl;
cout << "double sizeof = " << sizeof(d1) << endl;
// 科学计数法
float f2 = 3e2; // 3 * 10 ^ 2
cout << "f2 = " << f2 << endl;
float f3 = 3e-2; // 3 * 0.1 ^ 2
cout << "f3 = " << f3 << endl;
system("pause");
return 0;
}
===== 2.4 字符型 =====
**作用**:字符型变量用于显示单个字符。
**语法**: ''char ch = 'a';''
> **注意1**:在显示字符型变量时,用**单引号**将字符括起来,不要用双引号。
> **注意2**:单引号内只能有一个字符,不可以是字符串。
* C和C++中字符型变量只占用 **1个字节**。
* 字符型变量并不是把字符本身放到内存中存储,而是将对应的 **ASCII编码** 放入到存储单元。
**示例**:
int main() {
char ch = 'a';
cout << ch << endl;
cout << sizeof(char) << endl;
// ch = "abcde"; // 错误,不可以用双引号
// ch = 'abcde'; // 错误,单引号内只能引用一个字符
cout << (int)ch << endl; // 查看字符a对应的ASCII码
ch = 97; // 可以直接用ASCII给字符型变量赋值
cout << ch << endl;
system("pause");
return 0;
}
==== ASCII 码大致由以下两部分组成 ====
* **ASCII 非打印控制字符**:ASCII 表上的数字 **0-31** 分配给了控制字符,用于控制像打印机等一些外围设备。
* **ASCII 打印字符**:数字 **32-126** 分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。
===== 2.5 转义字符 =====
**作用**:用于表示一些**不能显示出来的ASCII字符**。
现阶段我们常用的转义字符有: ''\n'' ''\\'' ''\t''
^ 转义字符 ^ 含义 ^ ASCII码值(十进制) ^
| \a | 警报 | 007 |
| \b | 退格(BS),将当前位置移到前一列 | 008 |
| \f | 换页(FF),将当前位置移到下页开头 | 012 |
| \n | 换行(LF),将当前位置移到下一行开头 | 010 |
| \r | 回车(CR),将当前位置移到本行开头 | 013 |
| \t | **水平制表(HT) (跳到下一个TAB位置)** | **009** |
| \v | 垂直制表(VT) | 011 |
| \\ | **代表一个反斜线字符"\"** | **092** |
| ' | 代表一个单引号(撇号)字符 | 039 |
| " | 代表一个双引号字符 | 034 |
| \? | 代表一个问号 | 063 |
| \0 | 数字0 | 000 |
| \ddd | 8进制转义字符,d范围0~7 | 3位8进制 |
| \xhh | 16进制转义字符,h范围0~9, a~f, A~F | 3位16进制 |
**示例**:
int main() {
cout << "\\" << endl;
cout << "\tHello" << endl;
cout << "\n" << endl;
system("pause");
return 0;
}
===== 2.6 字符串型 =====
**作用**:用于表示一串字符。
**两种风格**:
**1. C风格字符串**: ''char 变量名[] = "字符串值"''
**示例**:
int main() {
char str1[] = "hello world";
cout << str1 << endl;
system("pause");
return 0;
}
> **注意**:C风格的字符串要用双引号括起来。
**2. C++风格字符串**: ''string 变量名 = "字符串值"''
**示例**:
#include // 必须包含头文件
int main() {
string str = "hello world";
cout << str << endl;
system("pause");
return 0;
}
> **注意**:C++风格字符串,需要加入头文件 ''#include''
===== 2.7 布尔类型 bool =====
**作用**:布尔数据类型代表真或假的值。
bool类型只有两个值:
* ''true'' --- 真(本质是1)
* ''false'' --- 假(本质是0)
**bool类型占1个字节大小**。
**示例**:
int main() {
bool flag = true;
cout << flag << endl; // 1
flag = false;
cout << flag << endl; // 0
cout << "size of bool = " << sizeof(bool) << endl; // 1
system("pause");
return 0;
}
===== 2.8 数据的输入 =====
**作用**:用于从键盘获取数据。
**关键字**: ''cin''
**语法**: ''cin >> 变量''
**示例**:
int main(){
// 整型输入
int a = 0;
cout << "请输入整型变量:" << endl;
cin >> a;
cout << a << endl;
// 浮点型输入
double d = 0;
cout << "请输入浮点型变量:" << endl;
cin >> d;
cout << d << endl;
// 字符型输入
char ch = 0;
cout << "请输入字符型变量:" << endl;
cin >> ch;
cout << ch << endl;
// 字符串型输入
string str;
cout << "请输入字符串型变量:" << endl;
cin >> str;
cout << str << endl;
// 布尔类型输入
bool flag = true;
cout << "请输入布尔型变量:" << endl;
cin >> flag; // 输入非0值代表真,输入0代表假
cout << flag << endl;
system("pause");
return EXIT_SUCCESS;
}