C++ 数据类型
在C++编程中,数据类型是一个至关重要的概念,它定义了变量可以存储的数据种类、这些数据占用的内存空间以及可以对其执行的操作。理解数据类型是掌握C++编程的基础,也是编写高效代码的前提。
为什么数据类型很重要?
数据类型帮助编译器:
- 决定变量占用的内存空间大小
- 确定如何解释内存中的二进制数据
- 限制可以对变量执行的操作类型
- 提供类型安全,避免错误的数据操作
C++ 基本数据类型
C++提供了几种内置的基本数据类型,可以分为以下几类:
1. 整数类型
整数类型用于存储整数值(没有小数部分的数值)。
类型 | 大小 | 范围 |
---|---|---|
short | 通常2字节 | -32,768 到 32,767 |
int | 通常4字节 | -2,147,483,648 到 2,147,483,647 |
long | 通常4字节 | -2,147,483,648 到 2,147,483,647 |
long long | 通常8字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
#include <iostream>
using namespace std;
int main() {
int myNumber = 100;
short myShort = 32767;
long myLong = 1000000;
long long myLongLong = 9000000000;
cout << "整数值: " << myNumber << endl;
cout << "短整数: " << myShort << endl;
cout << "长整数: " << myLong << endl;
cout << "长长整数: " << myLongLong << endl;
return 0;
}
输出:
整数值: 100
短整数: 32767
长整数: 1000000
长长整数: 9000000000
2. 浮点类型
浮点类型用于存储带有小数部分的数值。
类型 | 大小 | 精度 |
---|---|---|
float | 4字节 | 约7位有效数字 |
double | 8字节 | 约15位有效数字 |
long double | 至少8字节 | 至少15位有效数字 |
#include <iostream>
#include <iomanip> // 用于设置浮点数精度
using namespace std;
int main() {
float myFloat = 3.14159f;
double myDouble = 3.141592653589793;
long double myLongDouble = 3.141592653589793238L;
cout << fixed << setprecision(10); // 设置输出精度为10位
cout << "单精度浮点数: " << myFloat << endl;
cout << "双精度浮点数: " << myDouble << endl;
cout << "长双精度浮点数: " << myLongDouble << endl;
return 0;
}
输出:
单精度浮点数: 3.1415901184
双精度浮点数: 3.1415926536
长双精度浮点数: 3.1415926536
备注
浮点数在计算机中的表示有时会导致精度问题,因此在需要进行精确计算的场景(如金融计算)中,应该考虑使用专门的库而不是浮点类型。
3. 字符类型
字符类型用于存储单个字符。
类型 | 大小 | 描述 |
---|---|---|
char | 1字节 | 存储单个字符或小整数 |
wchar_t | 通常2或4字节 | 用于存储宽字符 |
char16_t (C++11) | 至少2字节 | UTF-16编码 |
char32_t (C++11) | 至少4字节 | UTF-32编码 |
#include <iostream>
using namespace std;
int main() {
char character = 'A';
wchar_t wideChar = L'Ω';
char16_t utf16Char = u'€';
char32_t utf32Char = U'🌍';
cout << "字符: " << character << endl;
cout << "字符的ASCII值: " << int(character) << endl;
return 0;
}
输出:
字符: A
字符的ASCII值: 65
4. 布尔类型
布尔类型用于表示真(true)或假(false)的逻辑值。
类型 | 大小 | 取值 |
---|---|---|
bool | 通常1字节 | true 或 false |
#include <iostream>
using namespace std;
int main() {
bool isTrue = true;
bool isFalse = false;
cout << "isTrue: " << isTrue << endl;
cout << "isFalse: " << isFalse << endl;
cout << "isTrue的实际值: " << (isTrue ? "true" : "false") << endl;
return 0;
}
输出:
isTrue: 1
isFalse: 0
isTrue的实际值: true
类型修饰符
C++提供了几种类型修饰符,可以修改基本数据类型的范围或行为:
1. 符号修饰符
修饰符 | 描述 |
---|---|
signed | 允许存储正负值(默认) |
unsigned | 只允许存储非负值 |
#include <iostream>
using namespace std;
int main() {
signed int signedInt = -100;
unsigned int unsignedInt = 100;
cout << "有符号整数: " << signedInt << endl;
cout << "无符号整数: " << unsignedInt << endl;
// 无符号类型可存储更大的正值
cout << "最大无符号整数值: " << UINT_MAX << endl;
return 0;
}
2. 大小修饰符
修饰符 | 描述 |
---|---|
short | 减小数据类型的大小 |
long | 增加数据类型的大小 |
#include <iostream>
using namespace std;
int main() {
short int smallInt = 32767;
long int bigInt = 2147483647;
long long int veryBigInt = 9223372036854775807LL;
cout << "短整型大小: " << sizeof(smallInt) << " 字节" << endl;
cout << "长整型大小: " << sizeof(bigInt) << " 字节" << endl;
cout << "长长整型大小: " << sizeof(veryBigInt) << " 字节" << endl;
return 0;
}
提示
可以使用sizeof
运算符来获取任何数据类型或变量在特定平台上占用的字节数。
用户自定义类型
C++允许用户创建自己的数据类型,主要通过以下方式:
1. 结构体(struct)
结构体允许您将不同类型的数据组合到一个单元中。
#include <iostream>
#include <string>
using namespace std;
struct Student {
string name;
int age;
double gpa;
};
int main() {
Student student1;
student1.name = "张三";
student1.age = 20;
student1.gpa = 3.8;
cout << "学生姓名: " << student1.name << endl;
cout << "学生年龄: " << student1.age << endl;
cout << "学生GPA: " << student1.gpa << endl;
return 0;
}
输出:
学生姓名: 张三
学生年龄: 20
学生GPA: 3.8
2. 枚举类型(enum)
枚举为一组相关的常量提供了命名。
#include <iostream>
using namespace std;
enum DaysOfWeek {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
};
int main() {
DaysOfWeek today = WEDNESDAY;
cout << "今天是星期 " << today << endl;
if (today == WEDNESDAY) {
cout << "今天是星期三!" << endl;
}
return 0;
}
输出:
今天是星期 3
今天是星期三!
3. 类(class)
类是C++面向对象编程的基础,它可以包含数据和函数。
#include <iostream>
#include <string>
using namespace std;
class Person {
private:
string name;
int age;
public:
// 构造函数
Person(string personName, int personAge) {
name = personName;
age = personAge;
}
// 成员函数
void displayInfo() {
cout << "姓名: " << name << endl;
cout << "年龄: " << age << endl;
}
};
int main() {
Person person1("李四", 25);
person1.displayInfo();
return 0;
}
输出:
姓名: 李四
年龄: 25