#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`——前者可读性更好,也更不容易出错。

更多推荐