编程之“与、或(&|)”的使用技巧

因为手头开着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,感兴趣的可以找找看。


上面代码的运行结果:

编程之“与、或(&|)”的使用技巧_第1张图片




你可能感兴趣的:(java)