异或两个二进制字符串 c

新手上路,请多包涵

我有两个字符串如下:

 STRING1  :        011011110011000

STRING2  :        011001000001000

EXPECTED OUTPUT : 000010110010000

但是,当我尝试使用以下代码对它们进行异或(按位)时,输出为空白。代码:

 for(int i = 0; i<15; i++)
 {
    final_key[i] = STRING1[i] ^ STRING2[i];
    cout<<" XOR = "<<final_key[i];
 }

任何帮助,将不胜感激。

原文由 Siddharth Sharma 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 497
1 个回答

您正在尝试一次异或 2 char 。请尝试:

 final_key[i] = ((STRING1[i]-'0') ^ (STRING2[i]-'0')) + '0';

解释

有关 ASCII 值,请参阅 此处

The ASCII value for '0' is 48 and the ASCII value of '1' is 49. 48 ^ 49 is 1, 48 ^ 48 and 49 ^ 49 是 0。这些会将 0 或 1 的值返回给 char ,这将代表 EOF char(如果为 0)或 SOH char(如果是一个),两者都不能正确输出。

因此,您需要在执行 XOR 操作之前将每个 char 转换为位(0 或 1)。因此,您可以从每个 char 中减去 '0' 得到数字的数值,进行 XOR 运算,然后加回 '0' 得到正确的输出

原文由 Benson Lin 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题