c++信奥字符类型数字如何转换数字类型?
·
#include <bits/stdc++.h>
using namespace std;
int main() {
char a = '1';
cout<<a-'0'<<endl;//'1'-->1
return 0;
}
字符类型的数字转数字,核心原因在于 字符在计算机中是以 ASCII 编码(整数)存储的,而减 '0' 是利用 ASCII 码的连续性来实现字符到数字的转换。
原理解释
字符 '0' 到 '9' 在 ASCII 表中是连续排列的:
| 字符 | ASCII 码(十进制) |
|---|---|
'0' | 48 |
'1' | 49 |
'2' | 50 |
| … | … |
'9' | 57 |
所以当你执行 a - '0' 时,实际上是在做:
'1' - '0' → 49 - 48 → 1
这样就得到了字符 '1' 对应的数值 1。
为什么不直接输出字符?
如果你直接 cout << a,输出的是字符 '1'(一个字母/符号),而不是数字 1(一个整数)。虽然显示看起来一样,但它们的类型和用途完全不同:
'1'(char):ASCII 值为 49,是字符1(int):数值 1,可以参与数学运算
总结
减
'0'的本质就是:利用 ASCII 码的连续性,用目标字符的编码减去'0'的编码(48),得到对应的数值。
这是一种非常通用且高效的写法,适用于所有 '0'~'9' 的字符转数字场景。
#include <bits/stdc++.h>
using namespace std;
int main() {
char a = '1';
// 第一步:看看字符 '1' 的 ASCII 值是多少
cout << "字符 '1' 的 ASCII 值 = " << (int)a << endl;//49
// 第二步:看看字符 '0' 的 ASCII 值是多少
cout << "字符 '0' 的 ASCII 值 = " << (int)'0' << endl;//48
// 第三步:相减得到结果
int result = a - '0';
cout << "a - '0' = " << (int)a << " - " << (int)'0' << " = " << result << endl;//1
// 第四步:验证类型,确实变成了整数
cout << "result 的类型是 int,可以做数学运算:" << result + 10 << endl;
cout << endl;
// 再试几个字符
char b = '5';
char c = '9';
cout << "'5' - '0' = " << b - '0' << endl;//'5' - '0' = 5
cout << "'9' - '0' = " << c - '0' << endl;//'9' - '0' = 9
return 0;
}
这样你就能清楚地看到整个过程:
'1' 的 ASCII 值是 49,'0' 的 ASCII 值是 48
相减 49 - 48 = 1,得到真正的数字 1
结果可以直接参与数学运算(比如 1 + 10 = 11)
💡 小技巧:'0' 的 ASCII 值具体是多少其实不重要,关键是 '0'~`'9' 是连续排列的,所以用任意一个数字字符减去 '0',都能得到它对应的数值。这也是为什么我们写 a - '0' 而不是 a - 48`——前者可读性更好,也更不容易出错。
更多推荐


所有评论(0)