整数类型概述

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¹⁸)
注意: 使用 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; // 警告:数据丢失!
规则: 当目标类型能完全容纳源类型的所有可能值时,隐式转换是安全的。

显式类型转换

程序员明确指定的类型转换:

// 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);
最佳实践: 优先使用 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 num = 3.9999;
int intNum = (int)num; // 得到 3,不是 4!

转换方法总结

转换类型 方法 示例 结果 注意事项
整数 → 小数 自动转换 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

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

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;

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;

完整示例程序

#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;
}

实用技巧

// 技巧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 类型只能存储一个字符,使用单引号:'A'
  • 字符串使用双引号:"Hello"
  • ASCII码范围是 0-127,超出范围可能得到意外字符
  • 数字字符 '0'-'9' 的ASCII码是 48-57,不是 0-9

练习建议

动手试试:
  1. 写程序输出字母表的所有大写字母及其ASCII码
  2. 输入一个字符,输出它的前一个和后一个字符
  3. 输入一个小写字母,将它转换为大写字母
  4. 输入一个数字字符,将它转换为真正的数字

掌握了这些知识,你就能在字符和数字之间自由转换了!

记住:字符在计算机中本质上就是数字,ASCII码是它们的"身份证"

题目 对/错/率 难度 记录 通过
姓名 分数 提交时间 操作