【问题标题】:Why is xor-ing two `char` arrays showing garbage bits? [duplicate]为什么异或两个`char`数组显示垃圾位? [复制]
【发布时间】:2019-10-04 12:38:20
【问题描述】:

我有两个 char 数组 A 和 B。我想对这两个数组执行按位异或。但是输出显示一个垃圾值。我哪里错了?

我尝试在char 中对输出进行类型转换,因为array Aarray BASCII 中包含0 and 1。但它不起作用。

#include<iostream>
#include<cstdlib>

using namespace std;

int main(){
    char A[4] = {0,1,1,0}; 
    char B[4] = {1,1,1,0};
    char XOR[4];
    cout<< " PRINTING "<<endl;
    for(int i =0; i<4; i++)
    {
        XOR[i] = (char)(A[i]^B[i]);
        cout<<(char)XOR[i];
    }
    cout<<endl;

}

预期的输出是1000,但我得到的输出是垃圾。

【问题讨论】:

  • 可打印的 ASCII 字符从 32 开始。您正在尝试打印 ASCII 字符 0 和 1。要将值输出为整数,请将它们转换为例如int.
  • XOR[i] 的类型已经是 char。将其转换为 char 没有任何作用。
  • 我认为在这种情况下重复标记不合适。
  • @YesThatIsMyName 你能解释一下你为什么这么认为吗?解决方案是完全相同的,并且副本还尝试打印“异常”ASCII 字符(127 以上)并期望得到数字输出(由于某种原因,以十六进制表示,诚然,没有任何答案可以考虑)。根本问题仍然是“char 打印为 ASCII 字符,而不是整数”。如果您能找到更好的副本,请告诉我,我相信至少还有 10 个。有了这里的答案,我们又得到了另一个副本。
  • @MaxLanghof 因为他使用 char 并不意味着使用 chars 是正确的...... char 只是数字的错误类型。在我看来,他只是没有意识到这一点。这就是为什么我的回答告诉他使用整数数组......这改变了整个主题,并且与将 ASCII 字符打印为整数无关。在我们真正知道他为什么使用 char 之前,我们不能说它是重复的。

标签: c++ arrays xor bitwise-xor


【解决方案1】:

char 的流式操作符将数据视为字符,而不是数字。如果要将它们打印为数字,则必须将它们转换为数字进行打印:

cout<< static_cast<int>(XOR[i]);

【讨论】:

    【解决方案2】:

    一种解决方案是使用整数数组使其按您的意愿工作。 char 是“字母”的类型,而不是数字。

    这是一种可能的解决方案:

    #include<iostream>
    #include<cstdlib>
    
    using namespace std;
    
    int main(){
        int A[4] = {0,1,1,0}; 
        int B[4] = {1,1,1,0};
        int XOR[4];
    
        cout << " PRINTING "<< endl;
    
        for(int i=0; i<4; i++)
        {
            XOR[i] = A[i]^B[i];
            cout<<XOR[i];
        }
        cout<<endl;
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多