xbns.net
当前位置:首页 >> C语言异或运算 >>

C语言异或运算

异或是一个数学运算符.它应用于逻辑运算.在【布尔值运算】中:真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假.就是说两个值不相同,则异或结果为真.反之,为假. 在【二进制值运算】中:不同为1,相同为0,如1001异或1010等于0011.异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0异或0=0,1异或0=1,0异或1=1,1异或1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位.

首先,我们看一下异或的原理:a = 3 ^ 5;3的二进制是0011,5的二进制是0101.异或发现两者的不同之处,所以a最终为0110b(4).了解了异或的基本原理后,接下来看上述的代码.a^=b; 这一句使得a被赋值为“数值a”与“数值b”的“差异值”.然后:b^=a; 这一句用异或利用“差异值”来还原a的数值,并赋值给b.此时b等于a先前的数值.最后一句:a^=b; 因为a仍然保存着“差异值”,这一句通过异或使得b的初始值被还原,并赋值给a这样,异或就将a与b的数值“巧妙”地交换了…… 我也是百度的,和楼主一起学习…………

#include #include int main(){ FILE *p1,*p2; char ch,n; p1=fopen("D:\\源文件.txt","r"); p2=fopen("D:\\目标文件.txt","w"); if(p1==NULL||p2==NULL) { printf("文件打开失败\n"); exit(0); } printf("请输入密钥,并牢记,解密时要再次

异或是: ^ 在数字键6上面.不用调头文件的.

C语言的异或操作是位操作的一种,其运算符号为^.要打出这个符号,需要在英文输入法下,输入shift + 6 即 1 按下shift, 左右均可;2 按6, 即按下,抬起;3 抬起shift.异或操作是按位操作,当两个操作数同一位上值相同时(同为1或同为0),结果对应位上的值为0;否则值为1.

#include<stdio.h> int main(void) { int a,b,c,d,e; for(a=1;a<=5;a++) for(b=1;b<=5;b++) for(c=1;c<=5;c++) for(d=1;d<=5;d++) for(e=1;e<=5;e++) if(a^b&&a^c&&a^d&&a^e&&b^c&&b^d&&b^e&&c^d&&c^e&&d^e&&(b==2^a==3)&&(b==2^e==4)&&(c==1^d==2)&&(c==5^d==3)&&(e==4^a==1)) printf("A:%d B:%d: C:%d D:%d E:%d\n",a,b,c,d,e); return 0; }

异或的意思就是相异为真..现在问题主要是出现在这一句..b[--i]=a[j]^a[--j]; 注意啦..编译器编译的时候是从后向前的..也就是先算a[--j],这样j就先自减了..j从3变为2..然后再算a[j],因为j是2,调用的时候,就是调a[2] 所以整个语句第一次执行的时候就是b[2]=a[2]^a[2],结果显然是0;所以输出的是1100..有什么地方解释不清的可以再问我..嘿嘿..

根据算术的优先级,综合性,从左至右,b=b^a=1 ,a=a^1=1 ,b=b^1=0 ,a=a+0=1 结果就是这样

233. 上式相当于b^=a;a^=b; 因此,a=b=233. 相当于,a^b^a,得到b原来的值.

按位异或需要将异或双方转换成二进制数,如当a=5时,二进制为101,与0异或后结果为100,也就是b=4的二进制了.异或时的规则是:逐位进行比较,相同为0(即1与1异或为0,0与0异或为0),不同为1(即0与1异或为1,1与0异或为1).

网站首页 | 网站地图
All rights reserved Powered by www.xbns.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com