如何用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");}
结果如图,希望高手指点一下,是不是数组内的值异或出现问题,应该怎么该呢?十分感谢!!
自己改好了。。。先到先得分 展开
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语言中逻辑运算符号如下:
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1 ~ 取反
~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
所以异或运算符^就可以实现两个十六进制数的异或比如
a=0x45,b=0xa2;
y=a^b;
& 按位与 如果两个相应的二进制位都为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个字节的内容
c[k]=(a[k]^b[k])&0xFF;//要去掉前面的3个字节的内容
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
粗心了吧,最后一句打印应该是
printf("%02x\t",c[i]);
& 去掉,c[i]不是c[k]
printf("%02x\t",c[i]);
& 去掉,c[i]不是c[k]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询