C++ 为什么对两个“char”数组进行异或运算会显示垃圾位?

C++ 为什么对两个“char”数组进行异或运算会显示垃圾位?,c++,arrays,xor,bitwise-xor,C++,Arrays,Xor,Bitwise Xor,我有两个字符数组A和B。我想对这两个数组执行按位异或。但是输出显示一个垃圾值。我哪里做错了 我尝试在char中键入输出,因为array A和array B在ASCII中包含0和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

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

我尝试在
char
中键入输出,因为
array A
array B
ASCII
中包含
0和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;

}
#包括
#包括
使用名称空间std;
int main(){
字符A[4]={0,1,1,0};
charb[4]={1,1,1,0};
char-XOR[4];

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

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

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

以下是一种可能的解决方案:

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

}
#包括
#包括
使用名称空间std;
int main(){
int A[4]={0,1,1,0};
int B[4]={1,1,1,0};
int-XOR[4];

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