我正在查看下面的代码,我得到了逻辑,但我似乎无法理解'0'
的用途。
class Solution
{
public:
string addBinary(string a, string b)
{
string s = "";
int c = 0, i = a.size() - 1, j = b.size() - 1;
while(i >= 0 || j >= 0 || c == 1)
{
c += i >= 0 ? a[i --] - '0' : 0;
c += j >= 0 ? b[j --] - '0': 0;
s = char(c % 2 + '0') + s;
c /= 2;
}
return s;
}
};
答案 0 :(得分:8)
C和C ++标准要求字符'0'..'9'
是连续的并且不断增加。因此,要将其中一个字符转换为其代表的数字,您需要减去'0'
并将数字转换为代表它的字符,然后添加'0'
。
答案 1 :(得分:4)
C ++要求([lex.charset] / 3)在基本字符集中,数字'0'
,'1'
,'2'
,...,{{1}被编码为连续值。这意味着给定数字字符'9'
,您可以将其整数值计算为表达式c
。
答案 2 :(得分:1)
价值' 0'表示数字字符表示的ascii表的偏移量。 要比较两个值,当一个是ascii而另一个是二进制时,您需要转换为相同的基本表示。
答案 3 :(得分:1)
在ASCII码字符0中,表示为' 0'在C(和许多其他语言)中具有值48.在ASCII中,其他9个数字是连续的:' 0',' 1'等。 字符串由字符组成。所以如果你减去0' 0' 0到另一个数字,你得到它的数值。