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

#include<stdio.h>voidmain(){inta[4],b[4],c[4],i,j,k;printf("输入一个十六进制数\n");for(i=0;i<4... #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");}

结果如图,希望高手指点一下,是不是数组内的值异或出现问题,应该怎么该呢?十分感谢!!
自己改好了。。。先到先得分
展开
 我来答
天云小店
推荐于2016-05-06 · TA获得超过2.8万个赞
知道大有可为答主
回答量:3281
采纳率:91%
帮助的人:795万
展开全部
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);
修者世界
2015-06-02 · TA获得超过5852个赞
知道大有可为答主
回答量:5984
采纳率:61%
帮助的人:824万
展开全部
C语言中逻辑运算符号如下:
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1 ~ 取反
~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
所以异或运算符^就可以实现两个十六进制数的异或比如
a=0x45,b=0xa2;
y=a^b;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
御含灵9r
2013-05-13 · TA获得超过4157个赞
知道大有可为答主
回答量:3007
采纳率:0%
帮助的人:2696万
展开全部
c[k]=a[k]^b[k];//数组内元素进行异或,结果出错

c[k]=(a[k]^b[k])&0xFF;//要去掉前面的3个字节的内容
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
terranlong
2013-05-13 · TA获得超过7294个赞
知道大有可为答主
回答量:2660
采纳率:0%
帮助的人:4018万
展开全部
粗心了吧,最后一句打印应该是
printf("%02x\t",c[i]);
& 去掉,c[i]不是c[k]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式