您的位置:首页 > 其它

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

2010-08-11 01:47 363 查看
题目:一个整型数n,要把它的二进制形式的第i位与j位调换?(要求:用位运算)

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



Code:

int im = 1<<i-1;
int jm = 1<<j-1;

if ((n&im)==0 ^ (n&jm)==0)
//也可换成:((n&im)==im^(n&jm)==jm)

{
n ^= im;
n ^= jm;
}



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

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

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

自己该专攻,而不是全攻!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: