C++ 实现二进制字符串加法:addBinary 函数详解
这段代码是一个名为 addBinary 的 C++ 函数,用于将两个二进制字符串 a 和 b 相加,并返回结果字符串。
string addBinary(string a, string b)
{
string sum;
int t = 0;
for (int i = a.size() - 1, j = b.size() - 1; i >= 0 || j >= 0; --i, --j)
{
if (i >= 0)
t += a[i] - '0';// -'0' 表示字符转整数
if (j >= 0)
t += b[j] - '0';
sum.push_back((t % 2) + '0');// +'0' 表示整数转字符,此处取余后加入 sum 的末端
t /= 2;// 做除法是为了获得进位位数
}
if (t) sum.push_back(1 + '0');// 如果 t 不为 0,说明最高位有进位,将 1 转为字符并加入 sum 字符串的末尾
reverse(sum.begin(), sum.end());// 将 sum 翻转
return sum;
}
逐句解说内容:
-
函数定义:
string addBinary(string a, string b)定义了一个名为addBinary的函数,它接受两个字符串参数a和b,分别代表两个二进制字符串,并返回一个字符串作为结果。 -
变量初始化:
string sum;: 定义一个名为sum的字符串变量,用于存储最终的二进制加法结果。int t = 0;: 定义一个名为t的整数变量,用于存储进位值。
-
循环遍历:
for (int i = a.size() - 1, j = b.size() - 1; i >= 0 || j >= 0; --i, --j)使用一个for循环,从字符串a和b的末尾开始遍历,直到两个字符串都遍历完。i和j分别是两个字符串的索引,初始值为字符串长度减 1,表示从最后一位开始遍历。i >= 0 || j >= 0: 循环条件,只要i或j大于等于 0,就继续循环,确保两个字符串都遍历完。--i, --j: 循环体内,每次循环将i和j减 1,移到下一个字符。
-
字符转整数:
if (i >= 0) t += a[i] - '0';: 如果i大于等于 0,表示a字符串还有字符需要遍历,将当前字符a[i]转换为整数(减去字符 '0' 的 ASCII 码值),并加到t上。if (j >= 0) t += b[j] - '0';: 如果j大于等于 0,表示b字符串还有字符需要遍历,将当前字符b[j]转换为整数,并加到t上。
-
计算结果:
sum.push_back((t % 2) + '0');: 将t模 2 的结果(即当前位的加法结果)转换为字符(加上 '0' 的 ASCII 码值),并添加到sum字符串的末尾。t /= 2;: 将t除以 2,得到进位值,用于下一位的加法运算。
-
处理最高位进位:
if (t) sum.push_back(1 + '0');如果循环结束之后t不为 0,说明最高位有进位,将 1 转换为字符,并添加到sum字符串的末尾。 -
翻转结果:
reverse(sum.begin(), sum.end());将sum字符串翻转,因为我们是反向遍历字符串进行计算的,所以需要将结果翻转才能得到正确的顺序。 -
返回结果:
return sum;返回最终的二进制加法结果字符串sum。
代码说明:
这段代码利用了二进制加法运算的原理,通过逐位相加,并考虑进位,最终得到两个二进制字符串的加法结果。
t变量用于保存当前位的进位值,它可以是 0、1 或 2。- 当
t等于 2 时,表示进位到下一位,所以需要将t除以 2 并将余数(0 或 1)作为当前位的加法结果。 - 最后,需要将
sum字符串翻转,因为我们是反向遍历字符串进行计算的。
这段代码简洁易懂,展示了如何使用 C++ 代码实现二进制字符串加法,是一个很好的学习示例。
原文地址: https://www.cveoy.top/t/topic/plBw 著作权归作者所有。请勿转载和采集!