位运算的巧妙运用
2016-01-08 17:29
288 查看
1:位运算的符号
与运算:&或运算:|
异或运算:^
非运算:~
移位运算:>>和<<
1:判断一个数是否是2的N次方
题目要求:用一个表达式,判断一个数x是否是2的N次方,既2,4,8,16....,要求不可以用循环语句:
分析:2,4,8,16这样的数转换成二进制是10,100,1000,10000.
如果x减去1的二进制是01,011,0111,01111.这个时候与x做与运算,答案若为0,则x是2的N次方。
所以答案是:
public static void check2nNum(int num) { if ((num & (num - 1)) == 0) { System.out.println("num:" + num + " 2ncifangf"); } }
2:两个数交换
题目要求:将a,b两个数的值进行交互,并且不使用任何中间变量方式1:
public static void exchangeAB(int a,int b) { System.out.println(String.format("exchange before:a:%d;b%d",a,b)); a=a+b; b=a-b; a=a-b; System.out.println(String.format("exchange after:a:%d;b%d",a,b)); }
方式2:
异或运算:相同为0,相异为1
/** * 1,3 * @param a * @param b */ public static void exchangeAB2(int a,int b) { System.out.println(String.format("exchange before:a:%d;b%d",a,b)); a=a^b; b=a^b; a=a^b; System.out.println(String.format("exchange after:a:%d;b%d",a,b)); }
解释:
如1,3
a=(01^11)=(10)=3;
b=(11^01)=(01)=1;
a=(10^01)=(10)=3;
相关文章推荐
- 交叉验证cross-validation 的概念
- Mybatis入门
- iOS开发 UI 自定义视图
- Dynamic proxy
- iOS 5
- cell的背景渐变色和修改样式
- sql 随机取一条数据
- 纪念自己第一次进入CSDN
- HDOJ1073(Online Judge)(模拟+容器的使用)
- 在老男孩教育的日子里
- Android上传文件到服务器
- php开发中简单的引入编辑器的方法
- Redis学习记录之配置文件(四)
- hive1.2.1源码导入eclipse阅读以及调试
- 自定义View 拓展view 没有全部实现夫view中的构造方法 ApplicationContext is null in ApplicationStatus
- Swift字典
- ios实现长时间后台运行
- Sublime Text Snippets(代码片段)功能
- iOS 6
- Java内存区域及管理