如何用C语言实现两个16进制数的异或

#include<stdio.h>
void main(){
int a[4],b[4],c[4],i,j,k; printf("输入一个十六进制数\n"); for(i=0;i<4;i++) scanf("%02x",&a[i]); printf("输入另一个十六进制数\n"); for(j=0;j<4;j++) scanf("%02x",&b[j]);//输入16进制数,放入数组 for(k=0;k<4;k++) c[k]=a[k]^b[k];//数组内元素进行异或,结果出错
printf("转换后的数:\n"); for(i=0;i<4;i++) printf("%02x\t",&c[k]); printf("\n");}

结果如图,希望高手指点一下,是不是数组内的值异或出现问题,应该怎么该呢?十分感谢!!
自己改好了。。。先到先得分

C语言中,异或运算符是^。
不管运算对象是10进制的数还是16进制的数(或其他进制的数),进行^运算时,都是将运算对象转换为二进制,按位进行异或运算。

举例说明如下:
int a=0x9a, b=0x56;
int c = a^b; // 将a和b进行异或运算
运算过程是
a = 1001 1010 // 0x9a
b = 0101 0110 // 0x56
c = 1100 1100 // 0xcc (对应的二进制位进行异或运算)

输出的时候可以按16进制输出,如:
printf("%x", c);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-02
C语言中逻辑运算符号如下:
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1 ~ 取反
~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
所以异或运算符^就可以实现两个十六进制数的异或比如
a=0x45,b=0xa2;
y=a^b;
第2个回答  2013-05-13
c[k]=a[k]^b[k];//数组内元素进行异或,结果出错

c[k]=(a[k]^b[k])&0xFF;//要去掉前面的3个字节的内容本回答被提问者采纳
第3个回答  2013-05-13
粗心了吧,最后一句打印应该是
printf("%02x\t",c[i]);
& 去掉,c[i]不是c[k]
相似回答