通过一个位运算算法,感觉该复习基础知识了!
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方面的书籍.看看自己都在干些什么:追求各种证书,为了应试而编程而学习,学过的东西不愿意去回顾,这是自己最大的失误,殊不知:温故而知新,然而自己却没做到.现在发现复习也是一种新的学习!长期不回顾书本也是一种落后!
自己以后要做适当调整,古人云:术业有专攻!
自己该专攻,而不是全攻!
刚拿到手感觉,应该不会太难,但做到把这两个位提取后,再想交换时,思路卡着了!最后看看论坛上别人的答案(不止一个,但这个我比较满意,下面这个算法是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方面的书籍.看看自己都在干些什么:追求各种证书,为了应试而编程而学习,学过的东西不愿意去回顾,这是自己最大的失误,殊不知:温故而知新,然而自己却没做到.现在发现复习也是一种新的学习!长期不回顾书本也是一种落后!
自己以后要做适当调整,古人云:术业有专攻!
自己该专攻,而不是全攻!
相关文章推荐
- [Java]基础知识复习:例外的在继承中的机制
- C++学习(2)--基础知识(2)--指针复习
- SQL Server 索引基础知识(10)----Join 时的三种算法简介(转自蝈蝈俊.net)
- 多核程序设计的相关基础知识----以误差扩散算法为例
- 我的复习---JAVA基础知识
- 2.深度学习FPGA实现基础知识17(图像处理卷积运算 矩阵卷积)
- ORACLE sql基础知识复习
- BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的
- Introduction to Algorithms 算法导论 第1章 基础知识 学习笔记及习题解答
- JavaSE复习之六 基础知识:抽象类
- TCP IP基础知识的复习
- Professional C++ 01 A Crash Course in C++ 快速的C++基础知识复习
- sift算法基础知识
- Java基础知识复习(二)
- k8s技术预研1--通过一个简单实例认识k8s基础概念知识
- Oracle基础知识_整理复习_1
- HTML基础知识(常复习,常修正)
- 复习C++基础知识-----“我的第一本C++”读书笔记1
- SQL Server 索引基础知识(10)----Join 时的三种算法简介
- 复习C++基础知识-----“我的第一本C++”读书笔记4(终篇)