c++ - 减法中的“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”的要求是什么
解决方案
代表数字的字符“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)字符编码的系统上工作,而后者将在任何兼容的系统上工作。
推荐阅读
- html - 如何修复背景图像顶部的重复内容?
- oracle - 创建 pl/sql 过程的困难
- python - 为什么我不能在 Python 中打印 Tensor 对象的内容?
- angular - Amchart 图例 值和标记之间的边距不起作用
- .net - Azure AD Identity.Client 调用 AcquireTokenByUsernamePassword,得到 406 错误
- python - 试图绘制数据框中缺失的百分比
- r - Rmarkdown - 编织时如何查看警告
- node.js - 刮取数字的字符串
- android - 更新 firebase 构建版本后无法运行应用程序
- scala - SBT:是否可以在 build.sbt 中加载用户类并运行它?