C位运算,& | ^,异或运算交换变量的错误性原因

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;
}

所以,在实际代码产品中,尽可能不要用异或运算进行两变量交换,还是用临时变量安全方便,代码不是越短效率就越好。

 

参考文献:

【1】https://blog.csdn.net/solstice/article/details/5166912

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值