编程之“与、或(&|)”的使用技巧
来源:互联网 发布:夏季太极服淘宝网 编辑:程序博客网 时间:2024/06/06 06:00
因为手头开着Dev C++,所以示例代码用C语言来演示了,用JAVA的道理是一样的。
先看一段基本的代码:
#include <stdio.h>int PRIVATE = 0x1;int PUBLIC = 0x2;int FINAL = 0x4;int STATIC = 0x8;int main(){ int yu(int a,int b); int isPRIVATE(int a); int isPublic(int a); int isFINAL(int a); int isSTATIC(int a); int identifer = PUBLIC|STATIC; printf("identifer:%d\n",identifer); printf("is PRIVATE:%d\n", isPRIVATE(identifer)); printf("is Public:%d\n", isPublic(identifer)); printf("is FINAL:%d\n", isFINAL(identifer)); printf("is STATIC:%d\n", isSTATIC(identifer)); system("PAUSE"); return 0; }int yu(int a,int b){ return (a&b)!=0; }int isPRIVATE(int a){ return yu(a,PRIVATE);}int isPublic(int a){ return yu(a,PUBLIC);}int isFINAL(int a){ return yu(a,FINAL);}int isSTATIC(int a){ return yu(a,STATIC);}
这段代码定义了4个标识符,private,public,static,final
首先有一个方法(这里没写出来,java类中有)可以获取一个方法的标识符属性,例如public static void main中就有public和static,返回值包含这两项。
上面在定义4个标识符的时候,使用了1,2,4,8来表示,这4个数的特点是,二进制表示中只有一位是1,其他位是0.
返回值包含public和static时,通过或运算,即可让返回值包含这两项结果
PUBLIC|STATIC =
0010
1000
--------------------
1010
上面的结果就是10(或运算,只要某位是1,结果就是1,只有(0,0)才是0)。
我们需要做的就是,通过结果10,来判断标识符含有那些字段。
这里就需要用到与(&)运算,与(&)运算是二进制表示中,相同的位如果是(1,1),那么这个位的结果是1,(1,0),(0,1),(0,0)的结果都是0.
因而通过这个运算,我们可以判断,一个数字的某位是否为1,想判断哪位,就用那一位是1,其他位是0的数字是做与运算,如00000100,01000000.
如果到这里能明白,就知道如果那一位是1,那么(1,1)的结果肯定是1,那么整体的结果肯定不是0,所以可以根据&的结果!=0来判断。
这种方式的好处是,可以将多种状态放到一个参数上,通过判断参数来确定不同的状态,在某些情况下可以减少参数的个数。
这个方法在JDK的源码中是有的,类名可能是Modifier,感兴趣的可以找找看。
上面代码的运行结果:
- 编程之“与、或(&|)”的使用技巧
- Linux Vi或VIM的使用技巧
- 属性设置的技巧-----按位或和按位与的使用
- 使用汇编语言编程常见错误与技巧
- java异常处理之使用异常的技巧与原则
- 我的VC之路--CEdit 与 CRichEdit 使用技巧
- ios之单例类的创建实现与使用技巧总结
- CListCtrl的使用与技巧(转载)
- CListCtrl的使用与技巧(转载)
- c++ 自己遇到的编程陷阱或技巧
- DockPanel的使用与技巧
- DockPanel的使用与技巧
- 大量的开发编程技巧与实例
- 编程技巧与算法基本功的平衡
- 编程技巧之:Visual Studio 2003和VC6.0与Visual Assist X关联的问题
- PB窗口使用技巧之使用窗口属性编程
- PB窗口使用技巧之使用窗口属性编程
- 学习使用的编程及调试技巧
- Strings of Power
- 在Excel2003中按颜色进行排序
- 谷歌浏览器开发工具使用教程
- pku 1511 Invitation Cards(最短路径)
- 毕业两年总结
- 编程之“与、或(&|)”的使用技巧
- 博客小技巧
- 【读书笔记】linux系统中"共享文件"的原理
- 让Office 2003与Office 2010完美共存
- HDU-2844-Coins
- linux进程通信---消息队列
- [Python]网络爬虫:Python中的正则表达式教程
- 王兴:恨在中国创业,他先后创办了校内和饭否,但都令人瞩目地...
- Google Chrome调试js入门