Appearance
L2_05 数据类型转换
一、强制类型转换
1.1 语法
cpp
(目标类型) 表达式1.2 示例
cpp
double pi = 3.14159;
int num = (int)pi; // num = 3
float f = 5.9f;
int i = (int)f; // i = 51.3 C++ 风格转换
cpp
double pi = 3.14159;
int num = static_cast<int>(pi); // num = 3二、隐式类型转换
2.1 概念
编译器自动进行的类型转换,无需显式声明。
2.2 转换规则
- 低精度类型 → 高精度类型(安全)
- 高精度类型 → 低精度类型(可能丢失精度)
2.3 示例
cpp
int a = 10;
double b = a; // 自动转换:int → double
float c = 3.14f;
double d = c; // 自动转换:float → double2.4 运算中的转换
cpp
int x = 5;
double y = 2.0;
double result = x / y; // x 自动转换为 double三、类型转换注意事项
3.1 精度丢失
cpp
double num = 3.999;
int result = (int)num; // result = 3(小数部分被截断)3.2 溢出问题
cpp
int maxInt = 2147483647;
long long bigNum = maxInt + 1; // 可能溢出3.3 正确的转换方式
cpp
// 四舍五入
double num = 3.6;
int result = static_cast<int>(num + 0.5); // result = 4四、字符串与数字转换
4.1 字符串转整数
cpp
#include <string>
#include <sstream>
string str = "123";
int num;
istringstream(str) >> num; // num = 1234.2 整数转字符串
cpp
int num = 123;
string str = to_string(num); // str = "123"4.3 使用 C 风格函数
cpp
#include <cstdlib>
const char* str = "456";
int num = atoi(str); // num = 456
double d = atof(str); // d = 456.0五、示例程序
5.1 温度转换
cpp
#include <iostream>
using namespace std;
int main() {
double celsius, fahrenheit;
cout << "输入摄氏温度: ";
cin >> celsius;
fahrenheit = celsius * 9 / 5 + 32;
cout << "华氏温度: " << fahrenheit << endl;
return 0;
}5.2 类型转换综合示例
cpp
#include <iostream>
using namespace std;
int main() {
int a = 100;
double b = 3.14;
char c = 'A';
// 隐式转换
double sum = a + b; // a 转换为 double
cout << "sum = " << sum << endl;
// 显式转换
int charAscii = static_cast<int>(c);
cout << "ASCII value of 'A' is " << charAscii << endl;
return 0;
}