请帮我讲解一下C语言中的异或运算
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/08/31 12:19:38
请帮我讲解一下C语言中的异或运算
与其它语言不同,C语言和C++语言的异或不用xor,而是用“^”,键入方式为Shift+6.(而其它语言的“^”一般表示乘方)
若需要交换两个变量的值,除了通常使用的借用中间变量进行交换外,还可以利用异或,仅使用两个变量进行交换,如:
1
2
3
a=a^b;
b=b^a;
a=a^b;
详解:
1
2
3
a1=a^b
b=a1^b
a=a1^b=a1^(a1^b)=a1^a1^b=b
集合:
1
a=a^b^(b=a);
这样就完成了a与b的交换.
综上:同一变量与另一变量和其异或值异或等于自身.
用例:可使用于加密算法某一环节或更多环节,使算法更复杂,不易被破解,安全性更高
与其它语言不同,C语言和C++语言的异或不用xor,而是用“^”,键入方式为Shift+6.(而其它语言的“^”一般表示乘方)
若需要交换两个变量的值,除了通常使用的借用中间变量进行交换外,还可以利用异或,仅使用两个变量进行交换,如:
1
2
3
a=a^b;
b=b^a;
a=a^b;
详解:
1
2
3
a1=a^b
b=a1^b
a=a1^b=a1^(a1^b)=a1^a1^b=b
集合:
1
a=a^b^(b=a);
这样就完成了a与b的交换.
综上:同一变量与另一变量和其异或值异或等于自身.
用例:可使用于加密算法某一环节或更多环节,使算法更复杂,不易被破解,安全性更高
首先,我们看一下异或的原理:
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的数值“巧妙”地交换了……
我也是百度的,和楼主一起学习…………
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的数值“巧妙”地交换了……
我也是百度的,和楼主一起学习…………