为什么异或两个`char`数组显示垃圾位?

时间:2019-05-17 07:53:41

标签: c++ arrays xor bitwise-xor

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

由于chararray Aarray B中包含0 and 1,所以我尝试在ASCII中进行输出类型转换,但这没用。

#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,但我得到的输出是垃圾。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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

}