1.&与运算(只有1&1才为1,其他全为0)
应用:可以实现指定位清零;
应用:取出给出值的指定位;
2.|或运算(只有0|0才为0,其他全为1)
应用:结合|和&实现大小写字母转换?
3.^异或(或者XOR)运算符(相同为0不同为1,支持逆运算,常用于加密算法)
应用:特定位翻转:与0异或不变,与1异或则翻转。比如,使01111010前四位翻转,则跟00001111异或可实现。
应用:不使用临时变量实现两个变量数值交换(利用^的逆运算性质):
异或运算交换变量错误性原因分析:
在实际代码运算过程中,用利用中间临时变量来交换两个变量的值实际上是比较好的代码质量,虽然在代码技术上没有任何技术含量,但是在工程效率和程序稳定性方面确实极好的,能够有良好的平均运行效果。
临时变量在使用过程中发现,不一定会占用内存空间,很多情况下,此时的临时变量都会在寄存器上完成,根本不需要用上内存中的栈区来存储,而且,在运算过程中,只有两次内存读写。
而在使用异或运算进行交换时,要进行六次读三次写和三次异或运算,编译器可能会进行相应的优化,变成二次读三次写和三次异或运算,但是和临时变量比起来并没有优势,不同程序中表现不一样,很可能更差。
void swap(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
所以,在实际代码产品中,尽可能不要用异或运算进行两变量交换,还是用临时变量安全方便,代码不是越短效率就越好。
参考文献: