首页 > 解决方案 > '0' 字符和 << 运算符在此程序中的重要性

问题描述

    int getint(void)
    {
        int n=0;
        char c=getchar_unlocked();
        while(c<'0'||c>'9')
            c=getchar_unlocked();
        while(c>='0'&&c<='9')
        {
            n = (n<<3)+(n<<1)+c-'0';   // THE IS THE ALGO
            c=getchar_unlocked();
        }

        return n;
    }

上面的代码是关于输入值并返回 n。使用上面的公式,代码运行成功。我也尝试使用公式 n=c-'0' 运行它,它运行没有任何问题。但是当我从公式中删除 '0' 时,它不起作用。我想知道如果它在没有“<<”附加代码的情况下运行,为什么它在代码中使用......还解释为什么字符被“0”减去。

标签: ccharbit-shift

解决方案


这个表达

(n<<3)+(n<<1)

相当于

8 * n + 2 *n

这又等于

10 * n

因此这个说法

n=(n<<3)+(n<<1)+c-'0'; 

可以改写

n = 10 * n + c - '0';

另一方面, c - '0' 产生与数字表示相对应的整数数字,作为变量中的字符c。例如,如果变量c 存储字符数字“2”,则'2'-'0'产生2

因此,例如,如果输入以下数字序列“1”、“2”、“3”、“4”、“5”,那么您将得到数字12345


推荐阅读