c - '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”减去。
解决方案
这个表达
(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
。
推荐阅读
- python - 在 Python 中重命名文件,获取 FileNotFoundError
- python - aiohttp ClientSession.get() 方法静默失败 - Python3.7
- dialogflow-es - 是否有一种简单的方法可以在对话流中创建“电影名称”实体
- python - xarray - 返回满足特定条件的数据,而无需使用 for 循环
- python - 相对于另一个减少一个 python pandas 列
- python-3.x - 模块存在,但它说找不到
- python - 将数据集拆分为两个非冗余 numpy 数组?
- amazon-web-services - 如何在 Cloudformation Fn::Sub 中的 UserData 中添加两个变量
- java - 如何让 Scala 和 Java 与 Visual Studio Code 一起工作?
- python - 用于网络搜索历史的 GUI