首页 > 解决方案 > 减法中的“0”是什么意思?

问题描述

class Complex
{
public:
    int a,b;
    void input(string s)
    {
        int v1=0;
        int i=0;
        while(s[i]!='+')
        {
            v1=v1*10+s[i]-'0'; // <<---------------------------here
            i++;
        }
        while(s[i]==' ' || s[i]=='+'||s[i]=='i')
        {
            i++;
        }
        int v2=0;
        while(i<s.length())
        {
            v2=v2*10+s[i]-'0';
            i++;
        }
        a=v1;
        b=v2;
    }
};

这是一个类复合体,函数输入输入字符串并将其转换为类复合体的整数 a 和 b。 在这段代码中减去“0”的要求是什么

标签: c++

解决方案


代表数字的字符“0”到“9”具有(并且必须)连续的值。例如,在ASCII 字符集中,“0”字符被编码为值 48(十进制),“1”为 49,“2”为 50,依此类推,直到“9”为 57。其他编码系统可能对数字使用不同的实际值(例如,在EBCDIC中,'0' 是 240,'9' 是 249),但 C 标准要求它们顺序一致。来自C11 (ISO/IEC 9899:201x) 草案的 §5.2.1 :

在源和执行基本字符集中,上述十进制数字列表中 0 之后的每个字符的值都应比前一个字符的值大 1。

因此,当您'0'从代表数字的另一个字符中减去该字符时,您将得到该数字的数值(而不是其编码值)。

所以,在代码中:

int a = '6' - '0';

的值a将是 6(对于其他数字也是如此)。

不只是使用 (say) 的值48,而不是写作'0'的原因是前者只能在使用该特定(即 ASCII)字符编码的系统上工作,而后者将在任何兼容的系统上工作。


推荐阅读