Course playlist
整数类型概述
C++提供多种整数类型,不同平台上的大小可能有所差异:
// 基本整数类型及其典型大小
char // 1字节 (-128 到 127)
short // 2字节 (-32,768 到 32,767)
int // 4字节 (-2.1亿 到 2.1亿)
long // 4或8字节 (平台相关)
long long // 8字节 (-9.2×10¹⁸ 到 9.2×10¹⁸)
char // 1字节 (-128 到 127)
short // 2字节 (-32,768 到 32,767)
int // 4字节 (-2.1亿 到 2.1亿)
long // 4或8字节 (平台相关)
long long // 8字节 (-9.2×10¹⁸ 到 9.2×10¹⁸)
注意: 使用
sizeof(type) 可以查看类型在当前平台的实际大小。
隐式类型转换
编译器自动进行的类型转换,通常发生在小类型转大类型时:
// 小类型转大类型 - 安全
int a = 100;
long long b = a; // int → long long
short c = 50;
int d = c; // short → int
// 大类型转小类型 - 可能丢失数据
long long big = 3000000000LL;
int small = big; // 警告:数据丢失!
int a = 100;
long long b = a; // int → long long
short c = 50;
int d = c; // short → int
// 大类型转小类型 - 可能丢失数据
long long big = 3000000000LL;
int small = big; // 警告:数据丢失!
规则: 当目标类型能完全容纳源类型的所有可能值时,隐式转换是安全的。
显式类型转换
程序员明确指定的类型转换:
// C风格转换
int x = 100;
long long y = (long long)x;
// C++风格转换(推荐)
long long z = static_cast<long long>(x);
// 大转小需要显式转换
long long bigNum = 123456789;
int smallNum = static_cast<int>(bigNum);
int x = 100;
long long y = (long long)x;
// C++风格转换(推荐)
long long z = static_cast<long long>(x);
// 大转小需要显式转换
long long bigNum = 123456789;
int smallNum = static_cast<int>(bigNum);
最佳实践: 优先使用
static_cast,它提供更好的类型安全检查。
C++ 整数与小数类型转换教程
适合初学者的完整指南
基础知识
在C++中,我们经常需要在整数(如 int, long)和小数(如 float, double)之间进行转换。理解这些转换的规则非常重要!
隐式自动转换
编译器会自动进行的一些安全转换
// 整数 → 小数(自动提升)
int myInt = 42;
double myDouble = myInt; // 自动转换为 42.0
float myFloat = 3; // 自动转换为 3.0f
提示: 整数转小数通常是安全的,不会丢失信息
显式强制转换
程序员明确指定的类型转换
// 小数转整数
double price = 19.99;
int intPrice = (int)price; // 得到 19
float temperature = 36.7f;
int intTemp = (int)temperature; // 得到 36
转换方法总结
| 转换类型 | 方法 | 示例 | 结果 | 注意事项 |
|---|---|---|---|---|
| 整数 → 小数 | 自动转换 | double d = 5; |
5.0 | 安全,无信息丢失 |
| 小数 → 整数 | (int)转换 | int i = (int)3.14; |
3 | 丢失小数部分 |
| 四舍五入转换 | round() 函数 | int i = round(3.6); |
4 | 需要 #include <cmath> |
实际编程示例
// 完整的示例程序
#include <iostream>
#include <cmath> // 用于数学函数
using namespace std;
int main() {
// 示例1:基本转换
int students = 30;
double average = 85.5;
double totalScore = students * average;
// 示例2:小数转整数
double price = 29.95;
int intPrice = (int)price;
cout << "原价: " << price << ", 整数部分: " << intPrice << endl;
// 示例3:四舍五入
double measurement = 7.6;
int rounded = round(measurement);
cout << "测量值: " << measurement << ", 四舍五入: " << rounded << endl;
return 0;
}
初学者常见问题
问题1:为什么 5/2 得到 2 而不是 2.5?
答:因为两个整数相除,结果也是整数。要得到小数结果,至少有一个操作数要是小数:
double result0 = 5 / 2; // 2
double result1 = 5.0 / 2; // 2.5
double result2 = 5 / 2.0; // 2.5
double result3 = (double)5 / 2; // 2.5
问题2:如何实现四舍五入?
答:使用 round() 函数,需要包含 <cmath> 头文件:
#include <cmath>
double num = 3.6;
int rounded = round(num); // 得到 4
最佳实践总结
- ✅ 整数转小数会自动进行,很安全
- ✅ 小数转整数使用 (int) 转换
- ✅ 注意小数转整数会丢失精度
- ✅ 需要四舍五入时使用 round() 函数
- ❌ 不要假设小数转整数会四舍五入
- ❌ 注意整数相除会丢失小数部分
恭喜!你现在已经掌握了C++整数和小数类型转换的基本知识
多多练习,这些概念会变得越来越自然!
C++ int 与 char 类型转换教程
学习字符和数字之间的转换,了解ASCII码
什么是 char 和 int?
char(字符类型):用来存储单个字符,如 'A', 'b', '1', '@' 等
int(整数类型):用来存储整数数字,如 65, 97, 48 等
char letter = 'A'; // 存储字符 A
int number = 65; // 存储数字 65
int number = 65; // 存储数字 65
ASCII 码简介
ASCII(美国信息交换标准代码)为每个字符分配了一个数字编号:
| 字符 | ASCII 码 | 字符 | ASCII 码 | 字符 | ASCII 码 |
|---|---|---|---|---|---|
| 'A' | 65 | 'a' | 97 | '0' | 48 |
| 'B' | 66 | 'b' | 98 | '1' | 49 |
| 'C' | 67 | 'c' | 99 | '2' | 50 |
| 'Z' | 90 | 'z' | 122 | '9' | 57 |
记忆技巧:
• 'A' = 65, 'a' = 97(小写比大写大32)
• '0' = 48, '1' = 49 ... '9' = 57
• 空格 = 32, 换行符 = 10
• 'A' = 65, 'a' = 97(小写比大写大32)
• '0' = 48, '1' = 49 ... '9' = 57
• 空格 = 32, 换行符 = 10
char 转 int(自动转换)
字符可以自动转换为对应的ASCII码数字:
// 字符自动转换为ASCII码
char ch = 'A';
int asciiValue = ch; // 自动转换为 65
char digit = '7';
int digitValue = digit; // 自动转换为 55(ASCII码)
// 显示结果
cout << "字符 '" << ch << "' 的ASCII码是: " << asciiValue << endl;
cout << "字符 '" << digit << "' 的ASCII码是: " << digitValue << endl;
char ch = 'A';
int asciiValue = ch; // 自动转换为 65
char digit = '7';
int digitValue = digit; // 自动转换为 55(ASCII码)
// 显示结果
cout << "字符 '" << ch << "' 的ASCII码是: " << asciiValue << endl;
cout << "字符 '" << digit << "' 的ASCII码是: " << digitValue << endl;
int 转 char(强制转换)
数字可以转换为对应的ASCII字符:
// 数字转换为字符
int code = 66;
char character = (char)code; // 转换为 'B'
int smallA = 97;
char aChar = (char)smallA; // 转换为 'a'
// 显示结果
cout << "ASCII码 " << code << " 对应的字符是: '" << character << "'" << endl;
cout << "ASCII码 " << smallA << " 对应的字符是: '" << aChar << "'" << endl;
int code = 66;
char character = (char)code; // 转换为 'B'
int smallA = 97;
char aChar = (char)smallA; // 转换为 'a'
// 显示结果
cout << "ASCII码 " << code << " 对应的字符是: '" << character << "'" << endl;
cout << "ASCII码 " << smallA << " 对应的字符是: '" << aChar << "'" << endl;
完整示例程序
#include <iostream>
using namespace std;
int main() {
// 示例1:字符转数字
char letter = 'X';
int code = letter;
cout << "字符 '" << letter << "' 的ASCII码: " << code << endl;
// 示例2:数字转字符
int asciiNum = 88;
char asciiChar = (char)asciiNum;
cout << "ASCII码 " << asciiNum << " 对应的字符: '" << asciiChar << "'" << endl;
// 示例3:大小写转换
char upper = 'M';
char lower = (char)(upper + 32); // 大写转小写
cout << "大写 '" << upper << "' 转小写: '" << lower << "'" << endl;
return 0;
}
using namespace std;
int main() {
// 示例1:字符转数字
char letter = 'X';
int code = letter;
cout << "字符 '" << letter << "' 的ASCII码: " << code << endl;
// 示例2:数字转字符
int asciiNum = 88;
char asciiChar = (char)asciiNum;
cout << "ASCII码 " << asciiNum << " 对应的字符: '" << asciiChar << "'" << endl;
// 示例3:大小写转换
char upper = 'M';
char lower = (char)(upper + 32); // 大写转小写
cout << "大写 '" << upper << "' 转小写: '" << lower << "'" << endl;
return 0;
}
实用技巧
// 技巧1:数字字符转实际数字
char digitChar = '5';
int realNumber = digitChar - '0'; // 55 - 48 = 5
cout << "字符 '" << digitChar << "' 转数字: " << realNumber << endl;
// 技巧2:大小写转换
char uppercase = 'k' - 32; // 小写转大写
char lowercase = 'K' + 32; // 大写转小写
// 技巧3:字符运算
char nextLetter = 'A' + 1; // 得到 'B'
char prevLetter = 'Z' - 1; // 得到 'Y'
char digitChar = '5';
int realNumber = digitChar - '0'; // 55 - 48 = 5
cout << "字符 '" << digitChar << "' 转数字: " << realNumber << endl;
// 技巧2:大小写转换
char uppercase = 'k' - 32; // 小写转大写
char lowercase = 'K' + 32; // 大写转小写
// 技巧3:字符运算
char nextLetter = 'A' + 1; // 得到 'B'
char prevLetter = 'Z' - 1; // 得到 'Y'
注意事项:
- char 类型只能存储一个字符,使用单引号:'A'
- 字符串使用双引号:"Hello"
- ASCII码范围是 0-127,超出范围可能得到意外字符
- 数字字符 '0'-'9' 的ASCII码是 48-57,不是 0-9
练习建议
动手试试:
- 写程序输出字母表的所有大写字母及其ASCII码
- 输入一个字符,输出它的前一个和后一个字符
- 输入一个小写字母,将它转换为大写字母
- 输入一个数字字符,将它转换为真正的数字
掌握了这些知识,你就能在字符和数字之间自由转换了!
记住:字符在计算机中本质上就是数字,ASCII码是它们的"身份证"
| 题目 | 对/错/率 | 难度 | 记录 | 通过 |
|---|
| 姓名 | 分数 | 提交时间 | 操作 |
|---|