一、数据类型概述
数据是程序处理的对象,数据可以根据自身特点进行分类。
数学中有整数、实数等概念;日常生活中常用字符串表示人的姓名和地址;有些问题的回答只能是”是”或”否”,对应逻辑中的”真”和”假”。不同类型的数据有不同的处理方式:
- 整数和实数可以进行算术运算,但实数的表示不同于整数,需要保留一定的小数位。
- 字符串可以进行拼接操作。
- 逻辑数据可以参与”与””或””非”等逻辑运算。
此外,C++还可以将客观世界的事物抽象为自定义类型。
基本数据类型是C++编译系统内置的数据类型,无需额外定义即可直接使用。
二、基本数据类型分类
C++内置的基本数据类型包括:
布尔型 bool
字符型 char
整型 int
浮点型 float(表示实数)
双精度型 double(双精度浮点型)
其中 char 本质上属于整数类型,它是长度为1个字节的整数,通常用来存放字符的ASCII码值。
三、类型修饰符
关键字 signed、unsigned、short、long 被称为修饰符,用于改变基本数据类型的范围和属性。
short 修饰 int 表示短整型,占2个字节,此时 int 可以省略不写。
long 可以修饰 double 和 int:
- long 修饰 int 表示长整型,占4个字节。
- long 修饰 double 表示长双精度型。
注意:不同的编译器对数据类型的长度定义可能不同。
四、有符号与无符号
无符号(unsigned)整数只能表示非负数(正数和0)。
有符号(signed)整数可以表示正数、负数和0。
五、浮点型的精度差异
两种浮点型除了取值范围不同外,精度也有所区别:
float 可以保存7位有效数字。例如数值 0.231454145 在 float 类型中只能保证前7位数字的精度。
double 可以保存15位有效数字,精度高于 float。
六、bool类型
bool 类型的取值范围只能是 false(假)或 true(真)。
以下代码示例展示基本数据类型的定义和使用方式:
#include <iostream>
using namespace std;
int main()
{
// ===== bool类型 =====
bool isPass = true;
bool isOver = false;
cout << "isPass = " << isPass << endl; // 输出 1(true在C++中输出为1)
cout << "isOver = " << isOver << endl; // 输出 0(false在C++中输出为0)
// ===== char类型 =====
char grade = 'A';
char newline = '\n';
cout << "grade = " << grade << endl;
// char本质是1字节整数,存放ASCII码
char ch = 65; // 65对应ASCII字符 'A'
cout << "ch = " << ch << endl;
// ===== 整型 =====
int age = 20;
short int score = 95; // short修饰int,可省略int写为 short score = 95;
long int population = 1400000000L; // long修饰int
cout << "age = " << age << endl;
cout << "score = " << score << endl;
cout << "population = " << population << endl;
// ===== 有符号与无符号 =====
signed int temperature = -10; // 可以为负数
unsigned int count = 100; // 只能为非负数
cout << "temperature = " << temperature << endl;
cout << "count = " << count << endl;
// ===== 浮点型 =====
float pi_f = 3.1415926f; // float,约7位有效数字
double pi_d = 3.141592653589793; // double,约15位有效数字
cout << "pi_f = " << pi_f << endl;
cout << "pi_d = " << pi_d << endl;
// 精度对比示例
float f1 = 0.231454145f;
double d1 = 0.231454145;
cout << "float f1 = " << f1 << endl; // 有效数字约7位,末尾可能不精确
cout << "double d1 = " << d1 << endl; // 有效数字约15位,精度更高
// ===== 综合示例:不同类型参与运算 =====
int a = 10;
double b = 3.5;
double result = a + b; // int与double运算,int自动转换为double
cout << "result = " << result << endl;
bool compare = (a > b); // 比较运算结果为bool类型
cout << "a > b ? " << compare << endl; // 输出 1(true)
return 0;
}Code language: C++ (cpp)
七、各类型常见取值范围参考
以下为常见编译环境下的大致取值范围(不同平台可能略有差异):
| 数据类型 | 典型字节数 | 取值范围 |
|---|---|---|
| bool | 1 | false 或 true |
| char | 1 | -128 ~ 127(signed)或 0 ~ 255(unsigned) |
| short int | 2 | -32768 ~ 32767 |
| int | 4 | -2147483648 ~ 2147483647 |
| long int | 4 | -2147483648 ~ 2147483647 |
| unsigned int | 4 | 0 ~ 4294967295 |
| float | 4 | 约 ±3.4e±38,7位有效数字 |
| double | 8 | 约 ±1.7e±308,15位有效数字 |
八、小结
- 基本数据类型是C++程序中最基础的数据分类,包含布尔型、字符型、整型、浮点型和双精度型。
- 修饰符 short、long、signed、unsigned 可以改变数据类型的存储大小和表示范围。
- char 本质上是1字节整数,用于存储字符的ASCII码。
- float 和 double 的区别在于取值范围和有效数字精度。
- bool 类型只有 true 和 false 两个取值。
- 不同编译器对数据类型的长度定义可能不同,实际开发中应注意可移植性问题。
Previous: 认识C++代码的构成要素
Next: 各种类型的常量