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);
C语言中逻辑运算符号如下:
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1 ~ 取反
~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
所以异或运算符^就可以实现两个十六进制数的异或比如
a=0x45,b=0xa2;
y=a^b;
c[k]=a[k]^b[k];//数组内元素进行异或,结果出错
c[k]=(a[k]^b[k])&0xFF;//要去掉前面的3个字节的内容
粗心了吧,最后一句打印应该是
printf("%02x\t",c[i]);
& 去掉,c[i]不是c[k]