通过一个位运算算法,感觉该复习基础知识了!

 

      题目:一个整型数n,要把它的二进制形式的第i位与j位调换?(要求:用位运算)

      刚拿到手感觉,应该不会太难,但做到把这两个位提取后,再想交换时,思路卡着了!最后看看论坛上别人的答案(不止一个,但这个我比较满意,下面这个算法是CSDN中用户名为:zecard_fu提供的),感觉眼前豁然一亮:

 

Code:
  1. int im = 1<<i-1;      
  2. int jm = 1<<j-1;      
  3.      
  4. if ((n&im)==0 ^ (n&jm)==0)      
  5.    //也可换成:((n&im)==im^(n&jm)==jm)      
  6. {      
  7.         n ^= im;      
  8.         n ^= jm;      
  9. }   

     

      这个算法不算难,有一点C基础的都能看懂!

      事后我没再惊奇此算法的简练,而是自责自己为什么没有想到,想想自己自从半年前知道二级C过了之后,就再也没认真地看过关于C方面的书籍.看看自己都在干些什么:追求各种证书,为了应试而编程而学习,学过的东西不愿意去回顾,这是自己最大的失误,殊不知:温故而知新,然而自己却没做到.现在发现复习也是一种新的学习!长期不回顾书本也是一种落后!

      自己以后要做适当调整,古人云:术业有专攻!

      自己该专攻,而不是全攻!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值