c++ - 添加两个二进制字符串

标签 c++ binary addition

while循环中的代码块是如何执行的?

 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;
    }

另外这里cint类型,那么c%2+'0'和任意char a[i ]-'0' 是什么意思?

最佳答案

tl;dr 它使用 ASCII 算术将字符转换为数字以用于二进制算术。

二进制加法是两个二进制数的加法 - 此代码利用 C++ 将 char 转换为 int 的方式来实现这一点。 ASCII code因为数字是它在幕后的表现方式;例如,'0'对应48,'1'对应49。C++函数'1' - '0'实际上是返回 49 - 48;它减去 ascii 代码值。这就是为什么,例如 'a' - '0' 返回 49:'a' 的代码是 97,而 97 - 48 = 49.

a[i] - '0' 是对此的扩展, 获取有问题的字符并“减去”'0' 的 ASCII 值 从它。如果 a[i] 中的字符是 '0',则为 48 - 48;如果是'1',则为49 - 48。结果分别为数字0或1,可用于二进制运算。

使用上述逻辑,代码从两个输入字符串的右侧开始,一次解析一个字母的字符,使用这些属性来确定当前字母是否为 '0' '1',然后将结果放入c。 (如果你自己这样做,你也可以将字符转换为 int,如 (int)a[i--] 如果你愿意,但如果你给它错误的输入,这将失败。 )

如果第一个字符串中的当前数字是 '1',则 int 变量 c 接收 1,如果是 '0',则接收 0 。如果两个字符都是'1',则c变为2;这意味着我们需要“进位”。 c/= 2; 有助于进位:因为 int 在被分割时不会舍入,如果 c 为 0 或1,下一次迭代为0,为2,下一次迭代为1。

c % s + '0' 正在将数字转换回 为要添加到字符串的char。它采用 '0' (48) 的 ASCII 代码,如果 c 为 0 或 2(保留为 48,或 '0),则向其添加 0 ') 或如果 c 为 1 则对其加 1(将其更改为 49,或 '1')。有趣的是,如果您向 '0' 添加足够多的内容,它最终会变成字母,然后是符号,以及其他一些不可打印的 ASCII 字符。

一旦您掌握了 ASCII 逻辑并准备好处理二进制逻辑,this site包括 video explaining the code .祝你好运!

关于c++ - 添加两个二进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58292577/

相关文章:

C++映射线程同步

c# - 我转换为 Short 的二进制数据有效吗?

java - 如何将整数添加到数组中的整数

php - 添加功能不适用于数据库

c++ - getline() 只读第二个字(错误)

c++ - 自定义迭代器运算符重载

binary - 如何创建二进制补丁?

python - 从文本文件添加两个矩阵(Python 无模块)

c++ - 如何配置 C++ Zbar 扫描仪只解码 QR 码数据类型?

c - -fwrapv 有什么作用?